Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: elmasnew en 7 Noviembre 2015, 00:40 AM

Título: Ayuda con unas pequeñas correcciones de C a C++
Publicado por: elmasnew en 7 Noviembre 2015, 00:40 AM
Hola amigos, a ver si me podeis ayudar con este problemilla..

Estoy utilizando un codigo de C en visual studio 2010 y funciona bien casi todo, excepto unas pocas lineas que dan algunos errores que procedo a describir:

Primer error:

MiValor = malloc(MiValor_LEN);                                 ---->>> IntelliSense: no se puede asignar un valor de tipo "void *" a una entidad de tipo "unsigned char *"

Segundo error:

if ((MiValor = calloc(1, sizeof(struct global)))) {          ---->>> IntelliSense: no se puede asignar un valor de tipo "void *" a una entidad de tipo "global *"

Tercer error:

if (get_int(optarg, &MiValor->verbosity) != 0 || MiValor2 = 1 || 3 = MiValor3) {                              ---->>> IntelliSense: la expresión debe ser un valor L modificable

Cuarto error:

if (MiValor[0] = 0x80 && MiValor[4] = 0x80 && MiValor[8] = 0x80  && MiValor[12] = 0x80) {          ---->>> IntelliSense: la expresión debe ser un valor L modificable


Seguro que para alguien que sepa de C++ es facil solucionarlo, pero yo no conozco muy bien los metodos de este lenguaje..

Saludos..
Título: Re: Ayuda con unas pequeñas correcciones de C a C++
Publicado por: ivancea96 en 8 Noviembre 2015, 02:15 AM
Incluso en C, ese código es incorrecto.
Los primeros 2, como dice el compilador, es porque tratas de guardar un valor void* (que es lo que retorna malloc y calloc), en punteros de otro tipo. Tienes que hacer una conversión explícita:
MiValor = (unsigned char*)malloc(MiValor_LEN)

El tercero y cuarto dicen: la expresión debe ser un valor L modificable. valor L, con L de Left. Los operadores binarios tienen 2 elementos: el izquierdo L, y el derecho R. L = R;. El izquierdo L, en caso de asignaciones, no puede ser una constante. En el código tienes: 3 = MiValor3. "3" es uan constante numérica, no le puedes asignar otro valor.

Olvidando esos errores: En esos if, no estás haciendo comparaciones si es lo que pretendías hacer. Estás haciendo asignaciones. No confundas la asignación "var = 5", con la comparación "var == 5".