从递归返回时出现段错误...如下面的输出所示,它进入递归调用但在返回时出现段错误...这是什么原因...我是不是错过了一些无效的指针使用在这里?
#include<stdio.h>
#include<string.h>
void list(char path[],int i) {
printf("%s\n",path);
i--;
char newpath[]="0";
if(i>0){
strcpy(newpath,"");
strcpy(newpath,path);
strcat(newpath,"/");
strcat(newpath,"new");
list(newpath,i);
printf("%s\n",path);
}
else return;
return;
}
int main(){
list("start",10);
return 0;
}
输出:
start
start/new
start/new/new
start/new/new/new
start/new/new/new/new
start/new/new/new/new/new
start/new/new/new/new/new/new
start/new/new/new/new/new/new/new
start/new/new/new/new/new/new/new/new
start/new/new/new/new/new/new/new/new/new
start/new/new/new/new/new/new/new/new
Segmentation fault (core dumped)
最佳答案
在函数void list(...)
char newpath[]="0";
没有足够的内存用于其中的复制缓冲区。 (只有 2 个字节。一个用于 char,另一个用于空字符,您正试图在其中复制更多字节)。
也在这里
strcpy(newpath,"");
strcpy(newpath,path);
没有意义。第二个是 newpath
的最新内容。
您需要手动计算缓冲区的长度并分配那么多。
#include<stdio.h>
#include<string.h>
void list(char path[],int i)
{
int len;
printf("%s\n",path);
len = strlen(path)+strlen("/new")+1;
char *newpath=malloc(len);
memset(newpath,0,len);
i--;
if(i>0){
strcpy(newpath," ");
strcat(newpath,path);
strcat(newpath,"/");
strcat(newpath,"new");
list(newpath,i);
printf("%s\n",path);
free(newpath);
}
else return;
return;
}
int main(){
list("start",10);
return 0;
}
关于c - 在递归中传递指针会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25440098/