当从递归返回时它给出了分段错误...如下面的输出所示,它进入递归调用但返回时有分段错误..原因是什么..我错过了一些无效的指针使用这里吗?
#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)
答案 0 :(得分:2)
在函数void list(...)
char newpath[]="0";
没有足够的内存用于复制缓冲区。 (只有2个字节。一个用于char,另一个用于null字符,你试图在其中复制更多字节)。
也在这里
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;
}
答案 1 :(得分:0)
您应该更改
行 char newpath[] = "0"
至
char *newpath = malloc(strlen(path) + 5)
并包含stdlib.h
库。
这将为每个变量提供足够的内存,您可以追加。
PS:我正在添加4,因为/new
除path
中的字符串外还需要4个字符
最后一个字节用于标记字符串结尾的\0
字符。