现在的位置: 首页 > 综合 > 正文

string之’\0′的影响

2013年03月02日 ⁄ 综合 ⁄ 共 460字 ⁄ 字号 评论关闭

常见的错误:

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. 放完数据后,对数据做一下打印,做到万无一失

抱歉!评论已关闭.