C语言指针和数组的问题

liling198709 2011-06-15 09:39:13
下面程序中,main函数中定义字符数组程序没问题,若改成指针形式,运行则提示错误,请问为何?
void copy_string(char from[],char to[])
{
int i=0;
while(from[i]!='\0')
{
to[i]=from[i];
i++;
}
to[i]='\0';
}
void main()
{
char a[]="I am a teacher.";//运行无错误程序
char b[]="You are a student.";//运行无错误程序
char *a="I am a teacher.";//运行出错程序
char *b="You are a student.";//运行出错程序
printf("string a=%s\nstring b=%s\n",a,b);
copy_string(a,b);
printf("string a=%s\nstring b=%s\n",a,b);
}
...全文
138 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsifu2009 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maoxing63570 的回复:]
不要对字符串常量做更改
[/Quote]

++
caroline_wang 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dizuo 的回复:]

引用 2 楼 liling198709 的回复:

引用 1 楼 maoxing63570 的回复:
不要对字符串常量做更改

说清楚点啊

char *a="I am a teacher.";// 这种就是字符串常量,是只读的。
只有存在数组中,或者malloc申请的堆上内存才可以修改。
[/Quote]
受教了 
hackbuteer1 2011-06-15
  • 打赏
  • 举报
回复
改为数组类型是可以修改的,char *a是字符串常量,不能修改的
如此美丽的你 2011-06-15
  • 打赏
  • 举报
回复
char a[]="I am a teacher.";//运行无错误程序
char *a="I am a teacher.";//运行出错程序
注意两者的区别!!!
5t4rk 2011-06-15
  • 打赏
  • 举报
回复

说的对都
我来看看呵呵
赵4老师 2011-06-15
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
金刚葫芦娃 2011-06-15
  • 打赏
  • 举报
回复
原来是问为什么,我以为改代码就好了呢,晕了.
liling198709 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dizuo 的回复:]
引用 2 楼 liling198709 的回复:

引用 1 楼 maoxing63570 的回复:
不要对字符串常量做更改

说清楚点啊

char *a="I am a teacher.";// 这种就是字符串常量,是只读的。
只有存在数组中,或者malloc申请的堆上内存才可以修改。
[/Quote]
明白了,谢谢。。。
ryfdizuo 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liling198709 的回复:]

引用 1 楼 maoxing63570 的回复:
不要对字符串常量做更改

说清楚点啊
[/Quote]
char *a="I am a teacher.";// 这种就是字符串常量,是只读的。
只有存在数组中,或者malloc申请的堆上内存才可以修改。
某某9 2011-06-15
  • 打赏
  • 举报
回复
指向字符串常量的指针不能被修改内容
金刚葫芦娃 2011-06-15
  • 打赏
  • 举报
回复
strcpy(a,"I am a teacher.");
strcpy(b,"You are a student.");
c_losed 2011-06-15
  • 打赏
  • 举报
回复

char *a="I am a teacher.";//运行出错程序
char *b="You are a student.";//运行出错程序 //指向字符串常量的指针不能被修改内容导致报错
liling198709 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maoxing63570 的回复:]
不要对字符串常量做更改
[/Quote]
说清楚点啊
character_w 2011-06-15
  • 打赏
  • 举报
回复

char *a="I am a teacher.";//运行出错程序
char *b="You are a student.";//运行出错程序


这里申请的是字符串常量空间,不允许进行修改。
maoxing63570 2011-06-15
  • 打赏
  • 举报
回复
不要对字符串常量做更改
gilnuy0106 2011-06-15
  • 打赏
  • 举报
回复
受教了。。感谢楼主

69,371

社区成员

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

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