缓冲区大小已更改 我正在做一个简单的套接字通信,这里是我的C++代码< /p> 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); } while(1) { 字符串缓冲区=“23,45\n”; const char*foo=buffer.c_str(); cout

缓冲区大小已更改 我正在做一个简单的套接字通信,这里是我的C++代码< /p> 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); } while(1) { 字符串缓冲区=“23,45\n”; const char*foo=buffer.c_str(); cout,c++,C++,sizeof运算符返回对象的大小(以字节为单位)。它不返回容器类型的长度。您需要使用std::string::length()或std::string::size()来确定字符串的长度。我认为您误解了第一次迭代的5:它一定来自其他地方。sizeof(buffer)是在编译时计算出来的-它是std::string的大小,所以每次迭代都应该看到32 如果要查找字符串的长度,请使用buffer.size()。sizeof(buffer)告诉您的std::string对象的大小,它与存储在其中的字符数无

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

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


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

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

为什么不直接使用
buffer.size(<)/<代码>当使用<代码>字符串< /代码>?<代码> siZeOf(缓冲区)< /C> >返回<代码>缓冲区< /Case>对象的大小,这与它包含的字符串的长度不一样。请看这里> >约阿希姆,我是C++的新成员,但字符串缓冲区不是=“23,45 \N”。已经将字符串对象的长度固定为6,就像java中的那样?或者C++中的字符串对象的大小总是32?Thanks@Clint在C++<代码>字符串中,对象不是只读的,就像java中的。它们可以被调整大小、突变等。因此字符串的长度只能在运行时可用。字符串的长度是“C++”。6
,因为终止的
“\0”
不算在内。@JoachimPileborg:有一种说法是6,是的,我给你这个(对我来说,缓冲区大小是缓冲区的大小,而不是它所容纳的字符串的长度)。但是,它决不是5。谢谢你,如果没有提示,我不会注意到差异。