您的位置:首页 > 其它

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

2009-06-17 14:41 411 查看
通常我们为字符串与字符数组的使用的差异而烦恼,因为一些细小的差别会带来一些莫名其妙的烦恼。

好了,下面就开始谈谈吧,直接进入要点吧,那些基本的就不说了,比如什么末尾'/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却没有问题,这个说明了什么问题呢?呵呵好好体会吧!定义一个字符串有它的特殊属性的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: