当前位置: 代码迷 >> C语言 >> 初学者啊关于C语言里面的指针有关问题
  详细解决方案

初学者啊关于C语言里面的指针有关问题

热度:7631   发布时间:2013-02-26 00:00:00.0
菜鸟求助啊~关于C语言里面的指针问题!
这段时间在学习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'
------解决方案--------------------------------------------------------
引用:
引用:出错是因为字符串在常量区,不能修改。这个和编译器有关。这样修改:
C/C++ code?12     char a[]= "hello!";     char b[] = "hello world!";

while结束的条件就是到达字符串结尾的'\0'

我知道结束是因为遇到了字符串尾的'\0',但是我不……

等于号表达式的结果就是赋值的结果. 所以字符串结束时*s=*t的结果当然会为0。
  相关解决方案