0
//------------------------------
    //creating dynamic array to send
    std::list<char> list;
    char in=NULL;
    while(1)
    {
        scanf("%c",&in);
        if(in=='\n') break;
        list.push_back(in);
    }
    //char *sendbuf=NULL;
    char* sendbuf=new char[list.size()]; // create a dynamic array   

        std::copy(list.begin(),list.end(),sendbuf); // copy the data 
        //sendbuf=array;
        iResult_send = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
        delete [] sendbuf; // destroy the dynamic array
        list.clear();
}
//-------------------------------------------

こんにちは、私は作成している動的配列を介してクライアントにデータを送信しようとしています。静的配列char型でデータを送信したとき、クライアントはそれをうまく取得しました。しかし、私がそのように送信しているとき、彼はメッセージの後にたくさんのゴミを受け取っています。私がスネージングしている私のアレイに何か問題がありますか?

4

2 に答える 2

1

iResult_send = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );

メッセージ サイズの決定が間違っています。それに対して list.size() を使用してみてください。

于 2012-05-23T17:52:12.380 に答える
0

問題は、データがヌルで終了していないため、 strlen() が正しいサイズを生成しないことです。(おそらく大きな価値への道)。

正しいです:

    iResult_send = send( ConnectSocket, sendbuf, sizeof(char) * list.size(), 0 );

ところで:省略できます

        list.clear(); 
    }

変数はブロックの最後で破棄されます。

于 2012-05-23T18:00:35.087 に答える