Portieren Ausgabe: Zeiger mit in VC-Offset ++
-
03-10-2019 - |
Frage
Ok, das feine compiliert in GCC unter 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;
}/*}}}*/
Aber ich habe ein Problem, das es auf Windows, aufgrund der Linie portiert ...
memcpy(s, offset+2, *len);
Als ein void-Zeiger, VC ++ will nicht den Zeiger auf Offset. Der üblicher Vorbehalt, dass CPP erlaubt keine Zeiger Offsets strittig sein sollte, da das gesamte Projekt wird unter extern „C“ gebaut.
Nun, dies ist nur 1 Funktion in vielen, und dazu die Antwort zu finden, wird sie erlauben, alle festgelegt werden. Ich würde wirklich lieber nicht das Bibliotheksprojekt von Grund auf neu zu schreiben, und ich will nicht unter MinGW bauen. Es muss ein Weg, dies zu tun, dass ich fehle, und die Suche nicht in Google.
Lösung
Nun, man kann nicht Zeiger arithmetics mit void * tun, es ist lächerlich, dass diese kompiliert unter GCC. versuchen memcpy(s, ((char*)offset)+2,*len);