c语言 利用函数将一个字符串复制并替换到另一个中

这个程序可以:
#include <stdio.h>
int main()
{void copy_string(char *from, char *to);
char *a="I am a teacher.";
char b[]="you are a student.";
char *t=b;
printf("string a=%s\nstring b=%s\n",a,b);
printf("copy string a to string b:\n");
copy_string(a,t);
printf("\nstring a=%s\nstring b=%s\n",a,b);
return 0;
}

void copy_string(char *from, char *to)
{ for(;*from!='\0';from++,to++)
*to=*from;
*to='\0';
}
改动了几个地方就不行:
#include <stdio.h>
int main()
{void copy_string(char *from, char *to);
char a[]="I am a teacher.";//有改动
char *b="you are a student.";//有改动
char *t=a;//有改动
printf("string a=%s\nstring b=%s\n",a,b);
printf("copy string a to string b:\n");
copy_string(t,b);//有改动
printf("\nstring a=%s\nstring b=%s\n",a,b);
return 0;
}

void copy_string(char *from, char *to)
{ for(;*from!='\0';from++,to++)
*to=*from;
*to='\0';
}

分析:
void copy_string(char *from, char *to); 这里可以看出参数1是源(数据提供者),参数2是目标(数据接收者)
copy_string(t,b);//从这句,可以看出,t是源,b是接收者
char *t=a;//这里,说明源是a数组
char *b="you are a student.";//这里看出,b是指针,指向一个常量串,(系统知识:常量字符串保存在系统的内存中不可修改区域,称之为静态区,只能读数据,不能向其中写数据)

因此,你的程序会出问题。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-18
char *b="you are a student.";//有改动

*b指向的内存区是常量区,不允许进行写操作

char b[]="you are a student.";

原来的b[]位于栈区,可以进行写操作

原来的程序也有bug,看起来正常运行,实际上数组越界了追问

谢谢哥们

相似回答