为什么下面的代码会出现分段错误?
#include <stdio.h>
int main() {
// Write C code here
char *p="abc";
printf("%s %s \n", p , p+1);// abc bc
printf("%s", *(p+1));//segmentation fault
return 0;
}
为什么 *(p+1) 会出现分段错误?
我想知道为什么会出现分段错误?
您会遇到分段错误,因为表达式 *(p+1) 引用了数组偏移量 1 处的字符——而不是字符串。但是 printf() 语句中的 %s 需要一个与单个字符非常不兼容的字符串。结果是一些未定义的行为和分段错误。
下面是对此的修复 - 我们要求 printf() 使用 %c 打印单个字符:
#include <stdio.h>
int main() {
// Write C code here
char *p="abc";
printf("%s %s \n", p , p+1);// abc bc
printf("%c", *(p+1)); /* corrected*/
return 0;
}