0

文字配列を次のように初期化しました: char Buffer[1000]={0}; この配列では、データがソケットから受信されて表示されます。この配列の内容を表示するたびに、すべての内容をゼロに初期化する必要があります。それを行わず、同じ配列を使用してソケットからデータを再度読み取ると、配列に存在する古いデータも表示されます。memset() 関数を使用して、データを 2 回目に受信する前に、配列のすべての内容をゼロで再度初期化しましたが、機能しませんでした。c/c++ でそれを行う他の方法はありますか? 助けを求める:(

4

2 に答える 2

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); 
于 2013-03-08T11:51:53.187 に答える
0

データを受信して​​表示した後、0から999までのループを実行して、配列の内容をリセットします。

于 2013-03-08T11:46:30.237 に答える