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必须是数组的形式了,要是指针的形式肯定要出段错误的。

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

c语言将一个字符串复制到另一个字符串
用标准函数 strcpy() 即可。例如:char s1[40]="abcd_1234";char s2[40];strcpy(s2,s1); \/\/复制到s2 printf("%s\\n",s2); \/\/输出。

c语言中strcpy(a,“ HELLO!”)的用法?
在C语言中,strcpy 函数用于将一个字符串复制到另一个字符串。这个函数的原型定义在 <string.h> 头文件中。使用 strcpy 函数时,你需要确保目标字符串有足够的空间来存储要复制的字符串。函数原型如下:c 复制 char *strcpy(char *dest, const char *src);dest 是指向目标字符串的指针,这个字符串...

C语言问题:写一个函数,将一个字符串中的元音字母复制到另一字符串后面...
include<string.h> void input(char st[]);\/\/定义输入函数 void output(char st[]);\/\/定义输出函数 void letter(char x[],char y[]);\/\/定义元音复制函数 int main(){ char s1[20],s2[10];input(s1);\/\/调用输入函数 letter(s1,s2);\/\/调用元音复制函数 output(s2);\/\/调用输出函数 re...

c++,c语言把一个字符串复制到另外一个字符串中。我不明白为什么要在复制...
因为str2[80]没有初始化的时候。编译器默认分配的字符,就是那些乱码 烫~~~输出puts函数是遇到'\0'结束符就结束字符串的输出,没有结束符标志自然全部输出,会有乱码 如果你不进行str2[i] = '\\0';赋值的话。那你在最开始 str2[80]要进行初始化 str2[80]=0;这样就一样的效果。有问...

C语言取某个字符后的字符串存到另一个字符串
思路:先遍历字符串,如果找到该字符后,把后面的所有字符复制到另一个字符串。例如:include <stdio.h>#include <string.h>int main (){char ch1[]="123456789",ch2[20],a='4';int i=0,j=0;while(ch1[i++]!=a);while(ch1[i]){ch2[j++]=ch1[i++];}ch2[j]='\\0';puts(ch2)...

...从第m个字符开始的全部字符复制成为另一个字符串
s1)会返回20,但这明显不是你需要的 gets(s1); printf("输入字符串为:%s ",s1); \/\/这里用strlen(s1)可以得到实际字符串长度 scanf("%d",&m); printf("m的值为:%d",m); copy(s1,s2,m); printf("result:%s\\n",s2); return 0;}void copy(...

用C语言:将一个字符串1复制到另一个字符串2的后面。并输出字符串2。
char *strcat(char *str1,char *str2){ char *p=str2;while(*p!='\\0')p++;while(*p++=*str1++);return str2;} int main(){ char a[30],b[50];printf("enter string 1 :");scanf("%s", a);printf("enter string 2 :");scanf("%s", b);printf("a+b=%s\\n",strcat(a...

在C语言中,利用指针,将一个字符数字复制到另一个字符数组。为何运行不出...
(1)除申明变量处,其余不能直接对字符串赋值,p="Another beautiful string";应改为 strcpy(p,"Another beautiful string");(2)字符串q明显比p短,而定义的strcpy函数*from应该比*to短才可以,否则会出现错误,若改成 strcpy(q,p)就可以了,另外p,q本身就是指针(地址变量),因此实参传递时...

...中从第m个字符开始的全部字符复制到另一个字符串,m由用户输入_百度...
char a[N], b[N];\/\/定义两个长度相同的数组 cout << "请输入字符串:";gets_s(a);\/\/按照提示:利用字符输入函数进行字符串输入并存到a数组中 cout << "请输入m:";cin >> m;\/\/按照提示:输入指定复制元素起始坐标 for (i = 0; b[i - 1] != '\\0'; i++)\/\/遍历从指定元素...

C语言 将一个字符串中的元音字母复制到另一个字符串,然后输出
include <stdio.h>#include <string.h>\/*将字符串src中的元音字母复制到des中*\/\/*返回复制的元音字母个数*\/int vowelLetter (char *des, char *src) {int count=0;while (*src++) {\/*英语元音字母有5个*\/if (*src=='a'||*src=='A'||*src=='e'||*src=='E'||*src=='i'|...

相似回答