C语言程序编译~~~~字符串复制4.exe 发应用程序错误!

#include<stdio.h>
void main()
{
void copy_string(char *from,char *to);
char *a="I am a teacher.";
char *b="you are a student.";
printf("\nstring a=%s\nstring b=%s\n",a,b);
printf("copy string a to string b:\n");
copy_string(a,b);
printf("\nstring a=%s\nstring b=%s\n",a,b);
}

void copy_string(char *from,char *to)
{
int i;
for(;*from!='\0';from++,to++)
*to=*from;
*to='\0';
}
字符串复制4.exe - 0 error(s), 0 warning(s)
但编译时却弹出对话框
字符串复制4.exe 发应用程序错误!
“0x004010fe”指令内存引用的“0x00422060”内存,该内存不能为“written”。
这是课本里的题目,调试却出错!
有高手可以解释一下吗?并提出恰当的解决方案
最新回答
世界等同你

2024-12-02 11:03:24

这是常识性问题。
使用char*来指向一个字符串,那么该语句实际上隐含了这样的意思;
const char* str = "abc";
即str是常量指针,不能通过访问指针来改变该字串的内容。这也是调试中出现内存不能写入的原因.
此类问题要用字符数组char[] 来代替字符指针,这样之所以能够成功,在于,数组是在栈上分配了相应的内存空间来存放这些变量值。那么在作用域的生命周期内自然可以通过指针来修改内存当中的内容了。
空城仅有旧梦在

2024-12-02 02:15:23

因为你这样定义以后,两个字符串a和b都是字符串常量,不能被修改的。
可以改成如下样子:
void copy_string(char *from,char *to);
char a[]="I am a teacher.";
char b[]="you are a student.";
printf("\nstring a=%s\nstring b=%s\n",a,b);
printf("copy string a to string b:\n");
copy_string(&a,&b);
printf("\nstring a=%s\nstring b=%s\n",a,b);
回首尽独你

2024-12-02 17:04:46

你这个程序没有错误,只是你输入的时候要注意
输入语句这样写scanf("%d%c%s",&st.a,&st.b,st.c);
你输入的时候就应该这么输入,
如12ahello回车
这样输入,st.a得到12,st.b得到a字母 ,st.c得到hello
而不能
12空格a空格hello
这样输入将会得到如下结果
st.a得到12,st.b得到空格字符 ,st.c得到a字符
自己可以试试看。
希望对你有帮助