Проблема портирования: указатель с смещением в VC ++

StackOverflow https://stackoverflow.com/questions/3733144

  •  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);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top