gpt4 book ai didi

带有显示 "Incomplete Sequence"的recv缓冲区的C指针

转载 作者:行者123 更新时间:2023-11-30 19:28:13 68 4
gpt4 key购买 nike

我正在 recv while 循环中将一些数据读入缓冲区。

缓冲区前面有内容,我需要查看这些内容并获取剩余的字节。因此,我使用指针在缓冲区中导航以获取所需的字符,以便将剩余字节复制到另一个缓冲区中。

但是,当我查看指针位置(以及来自 strcpy 调用的内容)时,我的调试器仅显示前几个字节,后跟“不完整序列”消息,并且缓冲区副本仅包含几个字节,直到缓冲区中显示为读取 \000 的字节为止。

This post描述了由于未以 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));

感谢您的见解。

最佳答案

移动声明

char * p = `buffer`;

跳出循环(以及其他建议):

char * p = NULL;
char content[BUFSIZE]; //this needs to be defined somewhere in your code
//as an array if the sizeof macro is to work.
//char *content = calloc(BUFSIZE, 1);//or as a pointer with memory created.
//then freed when no longer needed.


while ((receivedBytes = recv(sock, buffer, BUFSIZE - 1, MSG_CONFIRM)) > 0) {
buffer[receivedBytes] = '\0';

p += receivedBytes;//use receivedBytes to set position.
memcpy(content, p, receivedBytes);//use receivedBytes, not sizeof(content).
...
}

有许多关于 recv() 用法的引用资料,包括:

recv function | Microsoft Docs

recv() - Unix Linux System Call

您还提到缓冲区前面有内容,我需要查看这些内容并获取剩余字节......。您是否考虑过使用 strstr() strchr 。两者都返回指向搜索的子字符串或搜索的字符的指针。

例如,如果您有一个已知的唯一字符用作数据字符串中的分隔符,例如“>”,则可以使用 strchr() 将指针放置在内容处跟随该字符的位置:

char *p = NULL;
const char source[] = {"this is >test string"};
char buff[20];

p = strchr(source, '>');
if(p)
{

// "this is >test string"
// p is here ^
p++;
// "this is >test string"
// p is here ^
strcpy(buff, p);

关于带有显示 "Incomplete Sequence"的recv缓冲区的C指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54423452/

68 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com