缓冲区大小已更改

时间:2012-04-08 15:22:55

标签: c++

我在套接字之间进行简单的通信,这是我的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.任何想法为什么?非常感谢你。顺便说一句,增加的大小来自领先而空间。

3 个答案:

答案 0 :(得分:1)

sizeof运算符返回对象的大小(以字节为单位)。它返回容器类型的长度。您需要使用std::string::length()std::string::size()来确定字符串的长度。

答案 1 :(得分:1)

我认为你误解了第一次迭代中的5次:它必须来自其他地方。 sizeof(buffer)在编译时计算出来 - 它的大小为std::string,因此每次迭代都应该看到32。

如果您要查找字符串的长度,请改用buffer.size()

答案 2 :(得分:0)

sizeof(buffer)告诉您std::string对象的大小,它与您存储在其中的字符数无关(顺便说一下,在您的示例中为7,而不是5)。