Проблема портирования: указатель с смещением в VC ++
-
03-10-2019 - |
Вопрос
Хорошо, это компилируется нормально в GCC под 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;
}/*}}}*/
Однако у меня проблема портировании его в Windows, из-за линии ...
memcpy(s, offset+2, *len);
Будучи пустотой указателем, VC ++ не хочет компенсировать указатель. Обычное предостережение о том, что CPP не позволяет смещениями указателя должно быть спорным, так как весь проект построен под внешним «C».
Теперь это только 1 функция во многих, и нахождение ответа на это позволит им все быть исправленным. Я бы действительно предпочел не переписать проект библиотеки с нуля, и я не хочу строить под MINGW. Должен быть способ сделать это, что я скучаю, и не нахожу в Google.
Решение
Ну, вы не можете делать указатель арифметики с void *, смешно, что это компилирует под GCC. пытаться memcpy(s, ((char*)offset)+2,*len);