0

私はソケット間の簡単な通信を行っています。これが私のC++コードです

while(1)
{
    string buffer = "23,45\n";
    const char* foo = buffer.c_str();
    cout << "size of buffer is " << sizeof(buffer)<<endl;
    send (s, foo, sizeof(buffer), 0);
}

奇妙なことは最初の反復で、バッファのサイズは予想どおり 5 ですが、2 回目の反復以降、サイズは劇的に 32 に跳ね上がりました。どうもありがとうございました。ちなみに、追加されたサイズは先頭の while スペースに由来します。

4

3 に答える 3

1

演算子は、オブジェクトのsizeofサイズ(バイト単位)を返します。コンテナタイプの長さは返しません。文字列の長さを決定するには、std::string::length()またはを使用する必要があります。std::string::size()

于 2012-04-08T15:27:13.453 に答える
1

あなたは最初の反復の5つを誤解したと思います:それはどこかから来ているに違いありません。sizeof(buffer)はコンパイル時に計算されます。これはのサイズでstd::stringあるため、反復ごとに32が表示されます。

文字列の長さを探している場合は、buffer.size()代わりに使用してください。

于 2012-04-08T15:27:44.400 に答える
0

sizeof(buffer)オブジェクトのサイズを示しますstd::string。これは、オブジェクトに格納する文字数とは関係ありません(ちなみに、この例では5文字ではなく7文字です)。

于 2012-04-08T15:27:58.337 に答える