gpt4 book ai didi

字符数组在遍历时每 4 个字符返回一次

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:18 25 4
gpt4 key购买 nike

我正在编写一个连接到 Echo 服务器的客户端,该服务器返回发送给它的消息。从 TCP 收到数据后,我在从 char 数组获取数据时遇到问题。

char数组是这样定义的。

#define RCVBUFSZ 50

char *rcvBuffer[RCVBUFSZ];

当我打电话

bytesRead = recv(sock, rcvBuffer, RCVBUFSZ - 1, 0) 

我的 rcvBuffer 应该充满了 49 个字符,但保留了空终止符的最后一个位置......

如果我

printf("%s", rcvBuffer) 

它打印出我想在开头看到的消息,然后是废话。

然后,如果我尝试使用 for 循环打印,我会得到消息的每 4 个字符。

for (i = 0; i < bytesRead; i++)
{
printf("%c", rcvBuffer[i]);
}

为什么当我指定 50 个字符时,我的 char 数组分配了足够的内存来容纳 200 个字符?如何打印缓冲区中的数据并在它变成乱码时停止?

最佳答案

char *rcvBuffer[RCVBUFSZ]; 不是 char 的数组,它是 char* 的数组(包含 50 个指针的数组字符)。将其更改为 char rcvBuffer[RCVBUFSZ];。除此之外,您应该确保您的字符串以 '\0' 结尾:

char rcvBuffer[RCVBUFSZ];
int bytesRead = recv( sock, rcvBuffer, RCVBUFSZ - 1, 0 );
rcvBuffer[bytesRead] = '\0';

关于字符数组在遍历时每 4 个字符返回一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586288/

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