缓冲区大小改变
我做的插座之间的简单沟通,这里是我的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.为什么?非常感谢你。顺便说一句,增加的尺寸来自领先而空间。
运算符sizeof
返回对象的大小(以字节为单位)。它不是返回容器类型的长度。您需要使用std::string::length()
或std::string::size()
来确定字符串的长度。
谢谢,没有提示就不会注意到它们的区别。 – 2012-04-08 16:19:24
我想你误解了第一次迭代的第5次:它必须来自其他地方。 sizeof(buffer)
在编译时计算出来 - 它的大小为std::string
,所以你应该在每次迭代中看到32。
如果您正在查找字符串的长度,请改为使用buffer.size()
。
sizeof(buffer)
告诉你std::string
对象的大小,它与你存储在其中的字符的数量无关(顺便说一句,在你的例子中是7,而不是5)。
字符串的长度是'6',因为终止的''\ 0'不计算在内。 – 2012-04-08 15:30:30
@JoachimPileborg:有一种方法可以说它是6,是的,我给你这个(对我来说,* buffer *的大小是缓冲区的大小,而不是它保存的字符串的长度)。但是,这决不是5。 – bitmask 2012-04-08 16:00:57
为什么不像使用'string'时那样使用'buffer.size()'? – Griwes 2012-04-08 15:25:51
'sizeof(buffer)'返回'buffer'对象的大小,它与它所包含的字符串的长度不同。 – 2012-04-08 15:28:12
看看这里>> http://www.cplusplus.com/forum/beginner/24922/ – 2012-04-08 15:28:49