#include<stdio.h>
#include <string.h>
char *generate(char a[],int s,int e,char r[])
{
if(s>e){
printf("%s\n ",r); //Prints the correct value "rempD" here
return r;
}
int i,asci[128]={0};
for(i=s;i<=e;i++)
if(asci[a[i]]==1)
break;
else
asci[a[i]]=1;
char t[i-s];
t[i-s]='\0';
for(i=i-1;i>=s;i--)
t[i-s]=a[i];
if(r==0||strlen(t)>strlen(r))
return generate(a,s+1,e,t);
else
return generate(a,s+1,e,r);
}
int main()
{
char a[]="prrempD";
printf("Largest unique string:\n%s",generate(a,0,strlen(a)-1,NULL)); // But prints a garbage value here
}
此函数用于返回字符串中最大的唯一子字符串。 返回字符数组时,它返回一个垃圾值。
答案 0 :(得分:3)
char t[i-s];
已在堆栈上分配,并在您从generate()
返回时被取消分配。
如果你希望它超出对generate()
的调用,你必须使用堆或其他一些分配方法。
答案 1 :(得分:0)
它基本归结为返回指向局部变量的指针。
generate
将返回其第四个参数r
,在调用generate(a,s+1,e,t)
之后,它意味着您返回一个局部变量。离开函数后,此局部变量的内容无效。您需要传入缓冲区以将结果复制到,或者分配副本(通过malloc
或其他方式)并返回该指针。