如何在序列反转程序中修复此分段错误?

我正在练习C语言,只是构建了一个简单的程序,它可以反转一个单词中的字母序列。

#include  int main(void) { char str[50]; printf("Enter a word: "); scanf("%s", str); int i, len=0; char temp; while(str[len]!='\0') { len++; } /* for(i=0; i<len/2; i++) { temp=str[i]; str[i]=str[(len-i)-1]; str[(len-i)-1]=temp; } */ while(i!=len-1) { temp=str[i]; str[i]=str[len-1]; str[len-1]=temp; i++; len--; } printf("%s\n", str); return 0; } 

我有两个版本,一个工作得很好,但另一个做了“分段错误:11”我想我可能已经访问了错误的内存位置但是弄清楚我做错了什么是相当棘手的。

您需要将i初始化为0

 int i = 0; 

这样你就可以从字符串的开头开始了。 现在, i有一个未定义的值,并从你的字符串的边界访问内存。

你还需要改变你的状况:

 while (i != len-1) 

至 :

 while (i <= len-1) 

这样当你到达字符串的末尾时就会停止。