Porting Problema: puntatore con l'offset in VC ++
-
03-10-2019 - |
Domanda
Ok, questo compila bene nel GCC sotto 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;
}/*}}}*/
Tuttavia, sto avendo un problema porting a Windows, a causa della linea ...
memcpy(s, offset+2, *len);
Essendo un puntatore nullo, VC ++ non vuole compensare il puntatore. L'avvertenza usuale che CPP non consente compensazioni puntatore DOVREBBE essere discutibile, come l'intero progetto è in costruzione sotto extern "C".
Ora, questo è solo 1 la funzione in molti, e di trovare la risposta a questo permetterà a tutti di essere risolto. Vorrei davvero preferirei non dover riscrivere il progetto della libreria da zero, e non vuole costruire in MinGW. Ci deve essere un modo per fare questo che mi manca, e non trovando in Google.
Soluzione
Beh, non si può fare aritmetica puntatore con * vuoto, è ridicolo che questa compilazione sotto GCC. provare memcpy(s, ((char*)offset)+2,*len);