c - 在递归中传递指针会导致段错误

标签 c pointers recursion segmentation-fault parameter-passing

从递归返回时出现段错误...如下面的输出所示,它进入递归调用但在返回时出现段错误...这是什么原因...我是不是错过了一些无效的指针使用在这里?

#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/

相关文章:

c - 在 C 中使用 EquivalentInverseCipher 进行 AES 加密/解密

javascript - 递归删除所有具有空值的 JSON 键,如果所有子键都被删除,则删除父键

Python 递归尝试未返回任何值

linux - 如何将 `chmod -R +w` 与 Ant、文件和文件夹一起使用?

c - C语言中整数分数到字母等级?

c - 从数组和程序中提取整数值而不显示 printf 函数

python - 在 Linux 上编译同时使用 R 和 numpy 的 C 代码

c++ - 带指针的数组分区

c - 为什么我的指针会改变固定的数字?

c++ - 错误处理C++ : Program never stops