一道改错题解决方案
一道改错题C/C++ code#include stdio.hint main(void){char *s Helloprintf(%c\n, s[4])s[4]
一道改错题
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
一点拙见,不知是否正确?关于指针,似懂非懂,讲起来都知道,但一用就错。还应加强指针这方面的练习。
[解决办法]第一个在常量区,默认不能改的……
[解决办法]多错上几次就懂了
[解决办法]