Pregunta

Ok, esta bien compila en GCC en Linux.

char * _v3_get_msg_string(void *offset, uint16_t *len) {/*{{{*/
    char *s;
    memcpy(len, offset, 2);
    *len = ntohs(*len);
    s = malloc(*len+1);
    memset(s, 0, *len+1);
    memcpy(s, offset+2, *len);
    s[*len] = '\0';
    *len+=2;
    return s;
}/*}}}*/

Sin embargo, estoy teniendo un problema portarlo a Windows, debido a la línea ...

memcpy(s, offset+2, *len);

Al ser un puntero nulo, VC ++ no quiere compensar el puntero. La advertencia habitual que CPP no permite desplazamientos aguja debería ser discutible, ya que todo el proyecto está siendo construido bajo extern "C".

Ahora, esto es sólo el 1 función en muchos, y la búsqueda de la respuesta a esto permitirá a todos a ser fijos. Yo realmente preferiría no tener que volver a escribir el proyecto de la biblioteca desde el principio, y no quieren construir bajo MinGW. Tiene que haber una manera de hacer esto que me falta, y no encontrar en Google.

¿Fue útil?

Solución

Bueno, no se puede hacer con la aritmética de punteros void *, es ridículo que esta compila bajo GCC. tratar memcpy(s, ((char*)offset)+2,*len);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top