我已将字符数组初始化为: char Buffer [1000] = {0}; 在此阵列中,从套接字接收数据并显示 每次我显示这个数组的内容时,我想再次将其所有内容初始化为零。如果我不这样做并再次使用相同的数组从套接字读取数据,则还会显示数组中存在的一些旧数据。 我使用memset()函数在第二次接收数据之前再次使用零初始化数组的所有内容,但它不起作用。 在c / c ++中有没有其他方法可以做到这一点? 寻求帮助:(
答案 0 :(得分:2)
recvfrom
的合同不保证在收到的消息结束和缓冲区结束之间内存会发生什么。这就是recvfrom
返回有效字节数的原因。 缓冲区的其余部分不会更改,会被垃圾覆盖。
更改
memset(receiveBuffer,'\0',1000);
recv_len = recvfrom(socketIdentifier, receiveBuffer, sizeof(receiveBuffer), 0, (struct sockaddr *) &clientSocket, &clientSocketLength);
到
recv_len = recvfrom(socketIdentifier, receiveBuffer, sizeof(receiveBuffer), 0, (struct sockaddr *) &clientSocket, &clientSocketLength);
if (recv_len > 0)
memset(receiveBuffer + recv_len, 0, 1000 - recv_len);
答案 1 :(得分:0)
在接收并显示数据后,运行从0到999的循环以重置阵列的内容。