2

我正在编写一个从套接字接收输入的 C++ 应用程序。此输入以原始数据字符串的形式出现,因此它的主体中包含许多“\0”。

我的问题是,如何确定它的长度/大小而不停留在“\0”处,这样我就可以读取完整的套接字响应?响应 itef 的长度为 148,但 size() 返回 2。

4

1 回答 1

7

size()返回字符串的实际长度,并且不考虑空字节来结束字符串。您获得大小为 2 的原因是因为有不同的方法来设置字符串的值,其中一些确实认为空字节是字符串终止符。因此,您错误地将字符串的值设置为两个字符的字符串,而不是将其设置为保存完整的响应数据,并且size()准确地反映了该错误。

解决方案是使用不考虑空字节的方法来初始化或设置字符串:

char buffer[] = "abcd\0efg";

std::string s(buffer, 8);
std::cout << s.size() << '\n'; // outputs "8"

std::string s2(buffer);
std::cout << s2.size() << '\n'; // outputs "4"
于 2014-06-26T20:41:24.950 回答