2012-04-08 249 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