提问人:Rajat Chakraborty 提问时间:10/30/2023 更新时间:10/30/2023 访问量:107
字符 *p=“abc”;printf(“%s”, *(p+1));为什么会给出分段错误?
char *p="abc"; printf("%s", *(p+1)); //gives segmentation fault why?
问:
为什么下面的代码会出现分段错误?
#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) 给出分割 faublt?
我想知道为什么会出现分段错误?
答:
7赞
greg spears
10/30/2023
#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;
}
输出 -- 可运行代码如下:
abc bc
b
评论
3赞
chux - Reinstate Monica
10/30/2023
更像是“printf() 语句中的 %s 需要指向字符串的指针”
评论
printf
%s
warning: format specifies type 'char *' but the argument has type 'char'