char *p="abc"; printf("%s", *(p+1)); //为什么会出现分段错误?

问题描述 投票:0回答:1

为什么下面的代码会出现分段错误?

#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) 会出现分段错误?

我想知道为什么会出现分段错误?

arrays c pointers
1个回答
0
投票

您会遇到分段错误,因为表达式 *(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;
}
© www.soinside.com 2019 - 2024. All rights reserved.