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; }
关键修复说明
- 调整数组定义位置:把
wordSize和wordReverse的定义移到获取用户输入的length之后,这样数组的大小就是用户指定的长度,避免了数组越界的基础问题。 - 修正索引计算:将
length - c改为length - 1 - c,确保每次访问的都是数组的有效下标:- 当
c=0时,取最后一个元素(下标length-1) - 当
c=length-1时,取第一个元素(下标0)
- 当
- 改用char数组:把
int数组换成char数组,更贴合存储字符的需求,也更符合C语言的编码习惯。
这样修改后,不管输入的单词长度是多少,都能正确实现反转功能,不会再出现段错误或输出异常的问题了。
内容的提问来源于stack exchange,提问作者Stoutishhat90
相关产品推荐
相关产品推荐

