C语言问题:将一个字符串复制到另一个字符串中

#include <stdio.h>
int main()
{
void copy_string(char *from,char *to);
char *a="no money no life";
char b[]="one world one dream";
copy_string(a,b);
printf("a=%s\nb=%s\n",a,b);
}
void copy_string(char *from,char *to)
{
for(;*from!='\0';from++,to++)
*to=*from;
*to='\0';
}
问题:为什么可以第五行可以写成char *a="no money no life",而第六行却不能写成char *b="one world one dream",否则运行时出错

copy_string(a,b)
b必须是开辟的内存空间的
char *a="no money no life"; a只是一个指针 指向了一个字符串常识
char b[]="one world one dream"; 是自动根据字符串长开辟空间 而且 b必须有足够的空间来接纳a中的字符串,不然也会报错 因为空间不够了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-01
因为如果写成char *b="one world one dream"就变成b是一个字符串的常量指针,只能读,不能写。定义成数组就可以写入了。个人观点,仅供参考。我运行时,提示测错误是不能写入,所以有了以上猜想,供参考。
第2个回答  2020-01-18
while(n--)
{
s1++;
}
s1是char
*
类型的,
你把s1想成是:
char
s1[m+n]的一个数组,
s1++
相当于从s1[0]--->s1[1]
;
用while(n
--)
则移动了n次,则移到了s1[n-1]位置
第3个回答  2011-09-01
char *a="no money no life";这样的写法其实就相当于是定义一个常量,而你尝试改变常量的值,当然是不可以的。
第4个回答  2011-09-01
指针的形式是自动开辟空间,而数组形式是开辟你填写大小的空间,[]中为空时是字符串中的大小,你在copy_string给*from赋值时to必须是数组的形式了,要是指针的形式肯定要出段错误的。

有些地方我也说的不对,你可以查一下数组和指针的含义。
------------谢谢采纳
相似回答