You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:15:49