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

时间:2017-09-28 09:02:23

标签: c

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

#include <stdio.h>

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;
 }

我有两个版本,一个工作得很好但另一个制作&#34;分段错误:11&#34;我想我可能已经访问了错误的记忆位置,但弄清楚我做错了什么是非常棘手的。

1 个答案:

答案 0 :(得分:6)

您需要将i初始化为0

int i = 0;

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

您还需要改变您的状况:

while (i != len-1)

到:

while (i <= len-1)

以便在到达字符串末尾时停止。