分段错误错误:反转字符串时

时间:2014-07-08 13:55:27

标签: c segmentation-fault

#include<stdio.h>
#include<string.h>
void reverseMe(char *,int,int);
int main()
{
  char str[]="cycle";
  int len=strlen(str);
  reverseMe(str,0,len-1);
  return 0;
}

void reverseMe(char *x,int begin,int end)
{
  char c;
  c=*(x+begin);
  *(x+begin)=*(x+end);
  *(x+end)=c;

  reverseMe(x,++begin,--end);
}

为什么会出现分段错误? 我犯的错误是什么?

2 个答案:

答案 0 :(得分:5)

咦?

您永远不会检查字符串的限制,reverseMe()执行无限递归。当然它会给你的烟花。

你应该有像

这样的东西
if(begin < end)
{
  const char c = x[begin];
  x[begin] = x[end];
  x[end] = c;
  reverseMe(x, begin + 1, end - 1);
}

reverseme()内。另请注意,在许多情况下,数组索引比指针算法更清晰。

答案 1 :(得分:0)

您的函数无效,因为没有条件退出函数(递归)。

尝试以下

void reverseMe( char *s, int begin, int end )
{
   if ( begin < end )
   {
      char c =  s[begin];
      s[begin] = s[end];
      s[end] = c;
      reverseMe( s, begin + 1, end - 1 );
   }
}

此函数处理字符串时,我会按以下方式定义

char * reverseMe( char *s, int begin, int end )
{
   if ( begin < end )
   {
      char c =  s[begin];
      s[begin] = s[end];
      s[end] = c;
      return reverseMe( s, begin + 1, end - 1 );
   }

   return s;
}

在这种情况下,您可以使用以下方式

char str[] = "cycle";
printf( "%s\n", reverseMe( str, 0, strlen( str ) - 1 ) );