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..
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".