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

C语言实现用户输入单词反转时出现Segmentation Fault及输出异常的问题求助

问题分析与修复方案

我看到你在实现单词反转功能时遇到了段错误和输出异常的问题,咱们一步步来排查和修复:

核心错误点

  • 数组初始化时机错误:你在length初始为0的时候就定义了wordSize[length]和wordReverse[length],这意味着这两个数组的大小被固定为0了。后面你给length赋值为用户输入的x,但数组大小不会自动更新,后续访问数组元素时必然会出现越界,这就是导致段错误和输出异常的主要原因。
  • 数组索引越界:在while循环里,你用wordSize[length - c]来取元素,当c=0时,这个索引是length,而数组的有效下标范围是0到length-1,这会访问到数组外的内存,导致不可预测的行为。
  • 数组类型不匹配:你用int数组来存储字符,虽然C语言允许这么做,但更规范的做法是使用char数组,避免不必要的内存浪费和潜在问题。

修复后的代码

#include<stdio.h>
#include<stdlib.h>
int main() {
    // 初始化循环变量
    int a, b, c = 0;
    int length = 0;
    
    // 询问用户单词长度
    printf("How long is the word you would like to print backwards?:");
    scanf("%d", &length);
    
    // 定义数组(此时length已经有正确值,数组大小符合需求)
    char wordSize[length];
    char wordReverse[length];
    
    // 获取用户输入的字母
    for(a = 0; a < length; a++){
        printf("Please enter letter %d: ", a + 1);
        scanf(" %c", &wordSize[a]);
    }
    
    // 输出用户输入的单词
    printf("Your word is ");
    for(b = 0; b < length; b++){
        printf(" %c", wordSize[b]);
    }
    printf("\nYour word reversed is:");
    
    // 将字母反向存入第二个数组并输出(修正索引)
    while(c < length) {
        wordReverse[c] = wordSize[length - 1 - c];
        printf(" %c", wordReverse[c]);
        c++;
    }
    return 0;
}

关键修复说明

  1. 调整数组定义位置:把wordSize和wordReverse的定义移到获取用户输入的length之后,这样数组的大小就是用户指定的长度,避免了数组越界的基础问题。
  2. 修正索引计算:将length - c改为length - 1 - c,确保每次访问的都是数组的有效下标:
    • 当c=0时,取最后一个元素(下标length-1)
    • 当c=length-1时,取第一个元素(下标0)
  3. 改用char数组:把int数组换成char数组,更贴合存储字符的需求,也更符合C语言的编码习惯。

这样修改后,不管输入的单词长度是多少,都能正确实现反转功能,不会再出现段错误或输出异常的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:07:47