这个程序可以:
#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是指针,指向一个常量串,(系统知识:常量字符串保存在系统的内存中不可修改区域,称之为静态区,只能读数据,不能向其中写数据)
因此,你的程序会出问题。
*b指向的内存区是常量区,不允许进行写操作
char b[]="you are a student.";
原来的b[]位于栈区,可以进行写操作
原来的程序也有bug,看起来正常运行,实际上数组越界了追问
谢谢哥们