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,但是自从第二次迭代之后,大小急剧上升到 32。知道为什么吗?非常感谢你。顺便说一句,增加的大小来自前导而空格。

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对象的大小,这与您存储在其中的字符数无关(顺便说一下,在您的示例中是 7,而不是 5)。

于 2012-04-08T15:27:58.337 回答