小编Ale*_* B.的帖子

使用“空”字符数组中的构造函数时,C++ 错误的 std::string 长度

我在不同的编译器上测试了这个代码片段,但总是得到相同的结果,但我就是不明白为什么。

unsigned char buffer[0x4000] = {0};
string strText((char*)buffer, 0x4000);  
cout << "strlen((char*)buffer) = " << strlen((char*)buffer) << endl;;
cout << "strText.length() = " << strText.length() << endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

strlen((char*)buffer) = 0
strText.length() = 16384
Run Code Online (Sandbox Code Playgroud)

我正在std::stringunsigned char数组创建一个变量(您也可以使用有符号的字符数组,结果是相同的)。在将变量传递给字符串构造函数之前,数组内容被“清零”(根据情况使用 memset 或 C++ 数组初始化)。

如果使用 C 样式函数获取字符串长度strlen((char*)buffer),则结果如预期为“0”。

如果使用方法获取字符串对象的长度,则string::length()该值等于字符串构造函数中传递的数组大小(本例中为 16384)。为什么?

另外,作为副作用,如果使用打印字符串对象的内容,std::cout您会得到一个非常长的空字符串(所有“0”都被“空格”替换)。

我是否应该对 std::string 对象执行一些额外的操作以获得我期望的长度(0)?

谢谢

c++ arrays string string-length

-1
推荐指数
1
解决办法
139
查看次数

标签 统计

arrays ×1

c++ ×1

string ×1

string-length ×1