您的位置:首页 > 其它

字符串处理时刻提醒自己要在末尾手动加'\0'

2015-08-21 11:36 253 查看
话不多说,大家都明白字符串是以'\0'为结尾的,但偏偏今天编程序的时候忘了添加'\0'了,结果浪费时间调试一番才发现,囧死了。

先通过一段代码看看,忘记加'\0'会造成哪些难以发现的麻烦吧

#include<iostream>
#include<string>
using namespace std;
int main()
{
char *p;
char *q="ab";
p=new char[2];
cout<<strlen(p)<<endl;
cout<<sizeof(p);
return 0;
}


运行结果:16,4

1、明明给p分配了两个字节strlen(p)为啥变成16了呢?别急,我们进入strlen()函数内部看一下。

int strlen (const char * str)
{
int length = 0;

while( *str++ )
++length;
return( length );
}


原来strlen()是根据'\0'来判断是否到字符串末尾的,而且不管是否已经越界,而程序运行的时候恰巧在p指针后的第16(这个根据不同情况是个随机值)个字节有个0,所以就认为是16了。

2、为啥sizeof(p)是4呢?这个不必多说了吧,p是指针,sizeof指针是固定值4(64bit系统中是8),不明白请看我之前专门写的一篇关于sizeof的博客

3、既然用sizeof和strlen方法都看不出来究竟给p分配了多少字节,那单步调试总可以看出来吧?答案是否定的,我们看一下



总之,编程中遇到字符串一定要记着在末尾手动加上'\0'!!!!切记,切记。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: