字符数组中 *a = a[] 么?

drizztguai 2008-01-29 12:30:38
#include <stdio.h>
//

void copy (char *a,char *b)
{
char *p1,*p2;
p1=a;
p2=b;
for (;*p1!='\0';p1++,p2++)
*p2=*p1;
*p2='\0';
}

void main ()
{
char *a="day day up";
char *b="good good study";
copy (a,b);
printf ("%s\n",b);
}



运行则出现错误, 但把*a --> a[11] *b--> b[16] 就对了...

谁能给解释一下... 指针果然好麻烦~~~
...全文
83 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodmrning 2008-01-29
  • 打赏
  • 举报
回复
学习
zhangyue02135 2008-01-29
  • 打赏
  • 举报
回复
因为你在声明:char *a="day day up"; char *b="good good study";时,这两个字符串是放在全局区域,他们是只读的,你没办法改变。但你使用a[11],b[16]时,这部分空间在栈上,程序才能修改。大致是这样,需要高手进一步说明。
sheenl 2008-01-29
  • 打赏
  • 举报
回复
char *a="day day up";
这样是定义了常量字符串,不能修改常量字符串。

char a[] = "day day up";
就是字符变量数组, 可以修改。
zlcs8921 2008-01-29
  • 打赏
  • 举报
回复
你这段代码的目的是什么?
程序中有多处错误,
1 如果你把每个 char * 都用malloc 开辟空间,最后在free掉,就能运行了,虽然结果不是预期的。
2 for循环时 用*p1!='\0' 作为条件,非常危险。因为你怎么保证字符串 p1 比 p2 短?
3 1,2两层楼说的问题 。
数组与指针有什么不同:
char s[] = "china";
char *p = "china";
在第一句中,以&s[0]开始的连续6个字节内存分别被赋值为:
'c', 'h', 'i', 'n', 'a', '\0'
第二句中,p被初始化为程序data段的某个地址,该地址是字符串"china"的首地址

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧