C语言中的递归列表目录

C语言中的递归列表目录,c,C,我正在寻找一个代码,它将递归地列出C编程中参数给定的目录的所有目录和文件,我找到了一个相互测试代码(如下),但我不理解snprintf函数,尤其是“/”, 我更喜欢使用strcat或其他系统函数来覆盖sprintf函数,但我不知道怎么做,因为我不明白snprintf在这里做什么。 代码如下: int is_directory_we_want_to_list(const char *parent, char *name) { struct stat st_buf; if (!str

我正在寻找一个代码,它将递归地列出C编程中参数给定的目录的所有目录和文件,我找到了一个相互测试代码(如下),但我不理解snprintf函数,尤其是“/”, 我更喜欢使用strcat或其他系统函数来覆盖sprintf函数,但我不知道怎么做,因为我不明白snprintf在这里做什么。 代码如下:

int is_directory_we_want_to_list(const char *parent, char *name) {
    struct stat st_buf;
    if (!strcmp(".", name) || !strcmp("..", name))
        return 0;

    char *path = alloca(strlen(name) + strlen(parent) + 2);
    sprintf(path, "%s/%s", parent, name);
    stat(path, &st_buf);
    return S_ISDIR(st_buf.st_mode);
}

int list(const char *name) {
    DIR *dir = opendir(name);
    struct dirent *ent;

    while (ent = readdir(dir)) {
        char *entry_name = ent->d_name;
        printf("%s\n", entry_name);

        if (is_directory_we_want_to_list(name, entry_name)) {
            // You can consider using alloca instead.
            char *next = malloc(strlen(name) + strlen(entry_name) + 2);
            sprintf(next, "%s/%s", name, entry_name);
            list(next);
            free(next);
        }
    }

    closedir(dir);
}

好的,我的程序正在运行,但现在我想将打印的所有文件和目录保存到一个文件中,就像我运行我的程序一样。/a.out.>缓冲区,其中缓冲区包含程序应在shell上打印的内容

sprintf(next, "%s/%s", name, entry_name);
可以用

strcpy (next, name);
strcat (next, "/");
strcat (next, entry_name);

它也会做同样的事情。这对你来说清楚了吗?

嗯。。。什么是snprintf?代码段中没有。如果你不明白它的功能,为什么不查一下它的功能呢?你对sprintf到底有什么问题?它只是连接了3个字符串-name,“/”和entry_name。我认为sprintf很快就产生了所有问题,是的,我现在好多了,谢谢,是的,它是sprintf,sorryDo注意到对
strcat()
的每个调用都涉及遍历整个字符串以找到它的结尾,所以一个
sprintf()
这里的通话效率更高。