我在不同的编译器上测试了这个代码片段,但总是得到相同的结果,但我就是不明白为什么。
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::string从unsigned char数组创建一个变量(您也可以使用有符号的字符数组,结果是相同的)。在将变量传递给字符串构造函数之前,数组内容被“清零”(根据情况使用 memset 或 C++ 数组初始化)。
如果使用 C 样式函数获取字符串长度strlen((char*)buffer),则结果如预期为“0”。
如果使用方法获取字符串对象的长度,则string::length()该值等于字符串构造函数中传递的数组大小(本例中为 16384)。为什么?
另外,作为副作用,如果使用打印字符串对象的内容,std::cout您会得到一个非常长的空字符串(所有“0”都被“空格”替换)。
我是否应该对 std::string 对象执行一些额外的操作以获得我期望的长度(0)?
谢谢