如何避免C语言中的Segmentation Fault?我的代码为何触发段错误?
C语言代码段错误(Segmentation Fault)问题排查
你的代码如下:
#include <stdio.h> int main() { char c1,c2; c1 = getchar(); c2 = tolower(c1); int length = strlen(c1); printf("%d is the length. %d is lowercase of %d", length, c2, c1); return 0; }
问题分析
段错误的核心原因:
strlen(c1)用法完全错误strlen函数要求传入字符串指针(char*),它会从传入的地址开始读取内存,直到遇到\0终止符才停止。但你传入的是单个char变量c1,程序会把c1的字符值当作内存地址去访问,这个地址几乎肯定是非法内存空间,直接触发段错误。你读取的是单个字符,根本不需要用strlen。其他明显问题:
- 调用
tolower函数未包含头文件<ctype.h>,会导致未定义行为。 getchar()返回值是int类型(需容纳特殊值EOF,值为-1),用char存储可能导致判断错误。printf中用%d输出字符c1和c2,会输出ASCII码;如果要输出字符本身,应该用%c格式符。
- 调用
修正后的示例代码
#include <stdio.h> #include <ctype.h> int main() { int c1 = getchar(); // 用int存储,兼容EOF判断 if (c1 != EOF) { char c2 = tolower(c1); printf("Lowercase of '%c' is '%c'\n", c1, c2); } return 0; }
内容的提问来源于stack exchange,提问作者user19518892
相关产品推荐
相关产品推荐

