C语言运行出现Segmentation fault(core dumped)错误,求解决及原因
C语言代码触发Segmentation Fault错误的原因及修复
错误原因
你代码里的核心问题是printf的字符串参数用了单引号'。在C语言中,单引号仅用于包裹单个字符,而你这里的是多字符的字符串,应该用双引号"。
当你用单引号包裹长字符串时,编译器会将其视为多字符常量,它的值是一个整数。但printf函数的第一个参数要求是字符串指针(const char*),把这个整数当作指针传入后,printf会尝试访问该整数对应的内存地址,这属于非法内存访问,直接触发Segmentation Fault(段错误)。
修复后的代码
#include <stdio.h> int main() { int day = 35; if (day > 31) printf("Please enter a valid date\n"); else if (day % 7 == 1) printf("Monday\n"); else if (day % 7 == 2) printf("Tuesday\n"); else if (day % 7 == 3) printf("Wednesday\n"); else if (day % 7 == 4) printf("Thursday\n"); else if (day % 7 == 5) printf("Friday\n"); else if (day % 7 == 6) printf("Saturday\n"); else printf("Sunday\n"); return 0; }
额外提示
- 字符串必须用双引号包裹,单引号只能用于单个字符(比如
'a') - 建议给printf的字符串末尾加上
\n换行符,这样输出会立即刷新到终端,避免出现输出不显示的情况
内容的提问来源于stack exchange,提问作者Subrat Mohapatra
相关产品推荐
相关产品推荐

