关于字符串与字符数组的一些小问题

通常我们为字符串与字符数组的使用的差异而烦恼,因为一些细小的差别会带来一些莫名其妙的烦恼。

好了,下面就开始谈谈吧,直接进入要点吧,那些基本的就不说了,比如什么末尾'/0'字符,访问越界等一些问题就不必讨论了,学过的C的人都知道怎么会事情。

定义一个字符串的方法:

char *string="xxxxxx";

定义一个字符数组的方法:

char string[]="xxxxxx";

看看下面代码:

void test(char *string)

{

   if(string!=NULL)

         *string='a';

}

int mian(void)

{

   char a[]="abcd";

   char *b="abcd";

   char *c=NULL;

   test(a);//操作合法

   test(b);//操作不合法

}

这里发现操作test(b)的时候出错了,其实这里有需要注意的地方,定义一个字符串的时候,通常分配地址是在代码段,字符串有const属性,但是它的指针不具有const属性,所以我们仍然可以让这个指针指向其它地址空间。所以test(b)就不合法了。而字符数组则和普通变量差不多,但是数组名有两重含义,其中一种就是代表字符串的首地址,但是这个地址是个常量,就指向的地址空间不变,指向的内容可变,为了改变其指针属性,可以把这样改变b=a;这样b的地址和指向的内容均可变了。如果c=b,则c相对b的属性没有任何改变。

 

再看看下面一个例子:

 

char*  test()

{

   char a[]="sssssssss";

   char *b="sssssssss";

   char *c=a;

 return a;

 //return b;

//return c;

}

int mian(void)

{

   char *c=NULL;

   c= test();

   puts(c);

}

同样都是返回了一个字符串的地址,测试发现 return a和return c的时候有问题,return b却没有问题,这个说明了什么问题呢?呵呵好好体会吧!定义一个字符串有它的特殊属性的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章