2013-03-08 55 views
0

我已经初始化一个字符数组为: char Buffer [1000] = {0}; 在这个数组中,数据从套接字接收并显示出来 每次我显示这个数组的内容时,我想再次初始化它的所有内容为零。如果我不这样做并使用相同的数组从套接字中读取数据,则还会显示数组中存在的一些旧数据。 我使用memset()函数在第二次接收数据之前再次使用零初始化数组的所有内容,但它不起作用。 是否有任何其他方式在c/C++中做到这一点? 求助者:(删除C++中的字符数组的内容

+1

“我使用的memset()函数接收数据第二次之前重新初始化用零阵列中的所有内容,但它没有工作”是什么没有工作? – 2013-03-08 11:39:17

+0

看起来你已经混合了memset参数 – AnatolyS 2013-03-08 11:45:07

回答

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); 
+0

非常感谢:) 我试过了,整个问题都解决了:)你们的人真是太神奇了:) 非常感谢大家:) – Ayse 2013-03-08 11:57:39

0

正在接收和显示的数据后,运行从0到999的循环,以重置阵列的内容。

+0

'void receiveAtSocket() {\t \t receiveBuffer [] = {0}; memset(receiveBuffer,'\ 0',1000); 如果((recv_len = recvfrom的(socketIdentifier,receiveBuffer,的sizeof(receiveBuffer),0,(结构sockaddr *)&ClientSocket的,&clientSocketLength))== SOCKET_ERROR) { 的MessageBox(NULL, \t \t \t \t “ERROR”, \t \t \t \t “无法接收数据”, \t \t \t \t MB_ICONINFORMATION); \t exit(EXIT_FAILURE); } PostMessage(AH_Glb_windowHandle,WM_thread,0,0); }' – Ayse 2013-03-08 11:48:28

+1

这就是'memset'确实是什么,只有'memset'快得多 – 2013-03-08 11:49:33

+0

当我在我的代码中使用memseet时,没有显示数据,但是当我删除它时,显示数据。这就是为什么我认为memset()不适合:( – Ayse 2013-03-08 11:51:42