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