2012-04-08 229 views
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.为什么?非常感谢你。顺便说一句,增加的尺寸来自领先而空间。

+1

为什么不像使用'string'时那样使用'buffer.size()'? – Griwes 2012-04-08 15:25:51

+2

'sizeof(buffer)'返回'buffer'对象的大小,它与它所包含的字符串的长度不同。 – 2012-04-08 15:28:12

+0

看看这里>> http://www.cplusplus.com/forum/beginner/24922/ – 2012-04-08 15:28:49

回答

1

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

+0

谢谢,没有提示就不会注意到它们的区别。 – 2012-04-08 16:19:24

1

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

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

0

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

+0

字符串的长度是'6',因为终止的''\ 0'不计算在内。 – 2012-04-08 15:30:30

+0

@JoachimPileborg:有一种方法可以说它是6,是的,我给你这个(对我来说,* buffer *的大小是缓冲区的大小,而不是它保存的字符串的长度)。但是,这决不是5。 – bitmask 2012-04-08 16:00:57