#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;
}
我正在尝试编写一个递归函数来反转一个字符串,但它出现了链接错误。请帮助。我曾多次尝试并在互联网上搜索,但它无能为力。 我想最可能引起问题的地方是功能改变,但我无法解决它。
答案 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
,也未全局定义。