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.

È stato utile?

Soluzione

Beh, non si può fare aritmetica puntatore con * vuoto, è ridicolo che questa compilazione sotto GCC. provare memcpy(s, ((char*)offset)+2,*len);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top