c++ string构造函数和assign函数
#include <iostream>
#include <stdlib.h>
#include <string>
#include <string.h>
int main()
{
char buff[10] = {'a','b','c','d','e','f','g','h','i','\0'};
std::string str1;
str1.assign(&buff[0],0,10);
int length = str1.length();
int len = strlen(str1.c_str());
std::cout<<"test1: length="<<length<<",len="<<len<<std::endl;
std::string str2 = std::string((char*)&buff[0],10);
length = str2.length();
len = strlen(str2.c_str());
std::cout<<"test2: length="<<length<<",len="<<len<<std::endl;
std::string str3 = str2;
length = str3.length();
len = strlen(str3.c_str());
std::cout<<"test3: length="<<length<<",len="<<len<<std::endl;
std::string str4;
str4.assign(str3.c_str(),strlen(str3.c_str()));
length = str4.length();
len = strlen(str4.c_str());
std::cout<<"test4: length="<<length<<",len="<<len<<std::endl;
return 0;
}
[banting@localhost test]$ vim test.cpp
[banting@localhost test]$ g++ -g test.cpp -o test
[banting@localhost test]$ ./test
test1: length=9,len=9
test2: length=10,len=9
test3: length=10,len=9
test4: length=9,len=9
[banting@localhost test]$
结论:
为什么上述构造函数和assign函数,不同赋值,通过C++ string的成员函函数length()得到结果不一样?
因为不同函数操作,对length长度计算方式不一样 ,兼容C的接口,字符串结束符’\0’不计入长度。
参考文献
https://cplusplus.com/reference/string/string/string/
https://cplusplus.com/reference/string/string/assign/