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

C语言使用strcmp时出现segmentation fault段错误是什么原因?

错误原因

你遇到的段错误是数组越界访问导致的,核心问题出在for循环的判断条件写错:

  • 代码中循环条件写为 1 < 7,属于恒成立的永真表达式,会导致循环无限执行
  • names数组仅有7个元素,合法下标范围是0~6,当变量i自增到7及以上时,访问names[i]就属于越界访问不属于程序合法权限的内存空间,触发系统内存保护机制,抛出段错误。

修复方案

将for循环的判断条件修改为判断i是否小于数组长度即可,参考修改后的代码:

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    string names[] = {"Bill", "Charlie", "Fred", "George", "Ginny", "Percy", "Ron"};
    // 修改循环条件为i < 数组元素个数即可
    for (int i = 0; i < sizeof(names)/sizeof(names[0]); i++)
    {
        if(strcmp(names[i], "Angle") == 0 )
        {
            printf("Found\n");
            return 0;
        }
    }
    printf("Not found\n");
    return 1;
}

修改后循环只会遍历数组的7个合法元素,遍历完成后没有匹配项就会正常输出Not found。

内容的提问来源于stack exchange,提问作者Sherri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:18:02