C程序中的分段错误(核心转储)

时间:2013-11-20 08:37:29

标签: c string

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char *Change(char *str,int start,int end)
  {
  if(start==end || start>end){
    return str;
  }

  else{
    char temp=str[start];
    str[start]=str[end];
    str[end]=temp;
    return(Change(str,start++,end--));
  }
  return str;
}


char *Reverse(char *str)
{
   int length=strlen(str);
  return(Change(str,0,length-1));
}

int main()
{
   printf("%s\n",Reverse("program"));
   return 0;
}

我正在尝试编写一个递归函数来反转一个字符串,但它出现了链接错误。请帮助。我曾多次尝试并在互联网上搜索,但它无能为力。 我想最可能引起问题的地方是功能改变,但我无法解决它。

2 个答案:

答案 0 :(得分:1)

您正在将字符串文字(const char*)传递给Reverse(),因为您无法修改字符串文字,您的程序会生成细分错误。

您需要将可修改的字符串传递给Reverse()

char myStr[] = "program";
printf("%s\n",Reverse(myStr));

或者您可以在Reverse()中复制输入字符串:

char *Reverse(const char *str)
{
   int length=strlen(str);
   char* temp = malloc(length);
   strcpy(temp, str);
   return(Change(temp,0,length-1));
}

在这种情况下,您需要释放Reverse()返回的字符串:

char* reverseStr = Reverse("program");
printf("%s\n", reverseStr );
free(reverseStr);

同样在change()start++结束end--会在值递增之前返回值,您需要使用++start或简单start+1,因为您将不再使用这些变量:

return(Change(str,start+1,end-1));

答案 1 :(得分:0)

简单说明:您无法修改字符串文字。还有一件事是声明

return(Change(temp,0,length-1));  

将导致编译错误,因为函数temp中未定义Reverse,也未全局定义。