常见的错误:
char sz[5] = {'1', '2', '3', '4', '5'};
std::string str(sz);
std::cout << str.length() << "\n";
std::cout << str.c_str() << "\n";
输出:
原因:
就是字符串末尾不是'\0',所以得不到我们希望的结果。
更改:
把字符串改为
char sz[5] = {'1', '2', '3', '4', '\0'};
则输出为
这下就正确了。
阐述:
在c++编程中我们常常遇到申请一个缓冲区,为了不浪费内存把缓冲区申请为正好或稍大一点,然后填满数据,直接用char*构造string,结果常常结尾没有'\0',导致使用这个string的时候,发现数据不是我们想要到,其实原因就在一个小小的'\0'身上。
建议:
为了避免使用string的时候出错,我们可以这样.
1. 申请字符缓冲区的时候,总是申请比需要的多一个字节,用来存放'\0'
2. 缓冲区存放数据之前先把他们都初始化为'\0',或者存储数据之后在末尾加上'\0'
3. 放完数据后,对数据做一下打印,做到万无一失