这段时间在学习Brain W.Kernighan与Dennis M.Ritchie两位大神的《the c programming language》这本书~然后书中有个例子~没太理解~想运行下看看..结果是错的..main()函数是自己写的..strcpy(char *, char*)是书中的例子~
#include <stdio.h>
void strcpy(char *, char *);
void main()
{
char *a = "hello!";
char *b = "hello world!";
strcpy(b,a);
printf("%s\n",a);
printf("%s\n",b);
}
void strcpy(char *s, char *t)
{
while(*s++ = *t++)
;
}
调试的时候显示的错误是:Pro1.exe 中的 0x011e1a26 处有未经处理的异常: 0xC0000005: 写入位置 0x011e5818 时发生访问冲突
咋看都没看出来哪里不对了~还有,while()循环是如何退出的呢?是判断*s为0 所以退出了?因为赋值的结果总是为1吧?
c
------解决方案--------------------------------------------------------
出错是因为字符串在常量区,不能修改。这个和编译器有关。这样修改:
char a[]= "hello!";
char b[] = "hello world!";
while结束的条件就是到达字符串结尾的'\0'
------解决方案--------------------------------------------------------
等于号表达式的结果就是赋值的结果. 所以字符串结束时*s=*t的结果当然会为0。