一道改错题解决方案
一道改错题
乍看上去,这程序没什么问题,可编译后运行,打印出s[4]o后,即提示段错误,跟进程序,发现错误出现在s[4] = 'a'语句中。
想起来,关于指针的一些用法,其中一条即是不能随便修改指针所指向的内容,它的地址是可以改变的,这点与数组相反。数组是可以改变数组内容,但不能改变它的地址。于是乎,对上述程序进行修改,把char *s 修改为char s[]。
程序正常运行,输出:
o
Hella
一点拙见,不知是否正确?关于指针,似懂非懂,讲起来都知道,但一用就错。还应加强指针这方面的练习。
------解决方案--------------------
第一个在常量区,默认不能改的……
------解决方案--------------------
多错上几次就懂了
------解决方案--------------------
- 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
一点拙见,不知是否正确?关于指针,似懂非懂,讲起来都知道,但一用就错。还应加强指针这方面的练习。
------解决方案--------------------
第一个在常量区,默认不能改的……
------解决方案--------------------
多错上几次就懂了
------解决方案--------------------