Я читаю некоторые данные в буфер в цикле recv while.
В передней части буфера есть содержимое, которое мне нужно просмотреть в прошлом и добраться до оставшихся байтов.Поэтому я перемещаюсь по буферу, используя указатель, чтобы добраться до нужного мне символа, чтобы скопировать оставшиеся байты в другой буфер.
Однако, когда я смотрю на позицию указателя (и содержимое, которое выходитиз вызова strcpy
) мой отладчик показывает только первые несколько байтов, за которыми следует сообщение «Неполная последовательность», а буферная копия включает в себя только несколько байтов, вплоть до того, что в буфере выглядит как байт, читающий \000
.
Этот пост описывает проблему, возникающую из-за того, что полученные символы не заканчиваются NUL.Я сделал это, и, похоже, все еще происходит.Сам буфер выглядит нормально, но он всегда выглядит так, как будто указатель никогда не находится в правильном положении.
Я новичок в C. Как правильно получить оставшиеся предметы, чтобы я мог выполнить работу, необходимую для копирования оставшегося содержимого?
// reading in 256 bytes and leaving last one open to add null term
// at the start of the loop
// buffer contains:
//`"[stuff to look past]377\330\377\340\000\020JFIF\000\001\..."`
while ((receivedBytes = recv(sock, buffer, BUFSIZE - 1, MSG_CONFIRM)) > 0) {
buffer[BUFSIZE] = '\0';
// stuff to do ...
// len is calculated as the length of the start of the buffer to look past
// so move the pointer to the start of the contents I want to copy
// but p = [stuff to look past]377\330\377 <incomplete sequence \340>
// and no content past is read into the pointer
char * p = buffer;
p += len
// memcpy fails
memcpy(content, p, sizeof(content));
Спасибо за любую информацию.