读书人

一道改错题解决方案

发布时间: 2012-04-03 12:38:19 作者: rapoo

一道改错题

C/C++ code
#include <stdio.h>int main(void){    char *s = "Hello";    printf("%c\n", s[4]);    s[4] = 'a';    printf("%s\n", s);    return 0;}

乍看上去,这程序没什么问题,可编译后运行,打印出s[4]o后,即提示段错误,跟进程序,发现错误出现在s[4] = 'a'语句中。

想起来,关于指针的一些用法,其中一条即是不能随便修改指针所指向的内容,它的地址是可以改变的,这点与数组相反。数组是可以改变数组内容,但不能改变它的地址。于是乎,对上述程序进行修改,把char *s 修改为char s[]。
C/C++ code
#include <stdio.h>int main(void){    char *s = "Hello";    printf("%c\n", s[4]);    s[4] = 'a';    printf("%s\n", s);    return 0;}


程序正常运行,输出:
o
Hella

一点拙见,不知是否正确?关于指针,似懂非懂,讲起来都知道,但一用就错。还应加强指针这方面的练习。

[解决办法]
第一个在常量区,默认不能改的……
[解决办法]
多错上几次就懂了
[解决办法]
探讨

引用:

第一个在常量区,默认不能改的……

不是因为指针么?把char *s改成char s[]就没问题了。
指针指向一个常量。如果把另一个指针赋值给它,也是不行的。
个人觉得因为指针指向的内容不能修改的问题,这样的理解对么?

读书人网 >C语言

热点推荐