代码艺术家
Code artist

很喜欢释迦牟尼佛的一句话:“无论你遇见谁,他都是你生命该出现的人,绝非偶然,他一定教会你一些什么”。

有问题 问我 问Google

c/c++字符数组和字符串大揭秘

第一:写这篇文章源于我对'\0'和“\0”的探讨

              当我对char a []="\0";

               int size_a=sizeof(a);    //结果为2

当时我很纳闷字符串不是以'\0'结束吗,然后我又测试 :

              char a[]="b\0";

              cout<<sizeof(a);        //结果为3

再次测试:

              

              char a[]="\0\0\0";
              cout<<sizeof(a);        //结果为4

最后测试:

              

              char a[]="";
              cout<<sizeof(a);        //结果为1

 

通过测试发现字符串里的\0是系统自动添加,而且不管你原串里是否有\0;

第二:

示例一:int main(int argc, char *argv[])
{ char str[] = {'H','e','l','l','o'};
char bb[]={
'a','b','c','D'
};
cout<<bb<<endl;

输出结果如下:注意每次运行输出结果最后0后面的那个字符会不一样

输出结果

示例二:int main(int argc, char *argv[])
{ char str[] = {'H','e','l','l','o'};
char bb[]={
'a','b','c','D'
};
cout<<str<<endl;

输出结果如图

为什么图一输出的结果是abcDHello*(*号表示随机字符)?我们可以推测出由于采用栈的存储结构,所以在函数中先定义的先压栈测试如下面的

示例三:

int main(int argc, char *argv[])
{ char str[] = {'H','e','l','l','o'};
char bb[]={
'a','b','c','D'
};
char cc[]={
'A','B'
};
cout<<cc<<endl;

输出结果如下图:

然后我们探讨一下最末尾为啥就一个随机数字呢,

int main()
{
char str[] = {'H','e','l','l','o'};

char bb[]={'a','b','c','D' };
char cc[]={'A','B'};
bb[7]='\0';
cout<<bb<<endl;

结果如下图,如果对b[7]='\0',那么输出截止到bb后面第七个

以上测试是在mingw gcc version3.2测试的,用的是cfree,注意我用vs2010测试结果不一样啊

测试如图

地址高的地方在栈底,输出的时候,比如输出cc吧,ab烫烫abcd烫烫几下,然后hello在烫几下最后输出也结束,至于最后为啥结束,我再探讨ing

希望大牛斧正!

 

posted @ 2015-04-22 02:10  Jason‘  阅读(399)  评论(0编辑  收藏  举报