关于字符串与字符数组的一些小问题
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却没有问题,这个说明了什么问题呢?呵呵好好体会吧!定义一个字符串有它的特殊属性的。
好了,下面就开始谈谈吧,直接进入要点吧,那些基本的就不说了,比如什么末尾'/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却没有问题,这个说明了什么问题呢?呵呵好好体会吧!定义一个字符串有它的特殊属性的。
相关文章推荐
- 关于memcpy拷贝结构体、结构体数组到字符数组(字符串)的问题
- 关于字符串 字符数组 字符型指针的问题
- 关于字符串,字符数组 ,局部和全局地址分配问题
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 关于C语言字符数组、字符串和指针的相关问题
- 关于memcpy拷贝结构体、结构体数组到字符数组(字符串)的问题
- 关于char数组和字符串的一些问题
- 关于动态数组、静态数组转换为字符串的一些问题 - 给 "厨师" 的回复
- 关于内存及字符数组,字符串的一些注意点
- 关于数组指针,指针数组和字符串数组的一些问题
- 关于字符指针和字符数组初始化的问题
- c语言字符指针数组经典,此后不必再担心字符串问题.
- 关于字符数组与字符串指针的区分
- 关于字符数组的长度问题
- 字符串问题---判断字符数组中是否所有的字符只出现了一次
- 关于字符数组、字符串、字符指针、字符指针数组
- C 字符数组与字符串的使用及加结束符'\0'的问题
- 在字符数组中容易忽视的一些小的问题
- 关于字符数组赋值问题
- 关于模型数组进行本地保存中遇到的一些问题