gpt4 book ai didi

c - 如何将目录名称正确存储到链表中?

转载 作者:行者123 更新时间:2023-12-04 15:41:45 26 4
gpt4 key购买 nike

我正在尝试将目录和子目录的名称存储在链表中。当我使用 printf 显示它们时,名称被正确列出,但是当我尝试将它们存储在链接列表中时,它们没有正确显示。

当我只是打印时一切正常,但当我将字符串存储到链表并显示它时结果不同。

void ls_r(char *path) {
DIR *dir;
struct dirent *file;
struct stat buf;
char *temp;
t_list *list;

if (!(dir = opendir(path)))
return;
list = NULL;
while ((file = readdir(dir)) != NULL) {
if (file->d_name[0] != '.') {
temp = strdup(path);
strcat(temp, "/");
strcat(temp, file->d_name);
stat(temp, &buf);
if (buf.st_mode && S_ISDIR(buf.st_mode)) {
ft_list_insert(&list, temp);
printf("%s\n", temp);
ls_r(temp);
}
}
}
ft_print_list(list, "\n");
}

printf 结果:

./file3
./file3/file32
./file3/file33
./file3/file31
./file3/file31/file311
./file3/file31/file313
./file3/file31/file312
./file2
./file1
./file1/file11
./file1/file12
./file1/file13

链表结果:

./file3/file31/f .@��
./file3/file31/f�-@��
./file3/file31/f./file3/file31
./file3/file33
./file3/file32./file1/file13
./file1/file12
./file1/file11./file1
./file2
./file3

最佳答案

这些陈述

        temp = strdup(path);
strcat(temp, "/");
strcat(temp, file->d_name);

无效。

您必须保留足够的空间来包含字符串 path"/"file->d_name 的串联。

所以用例

temp = malloc( strlen( path ) + sizeof( ( char )'/' ) + strlen( file->d_name ) + sizeof( ( char )'\0' ) );

然后将字符串复制到分配的内存中。

strcpy( temp, path );
strcat(temp, "/");
strcat(temp, file->d_name);

也有可能未显示其代码的函数 ft_list_insert 未在列表中正确插入节点。

关于c - 如何将目录名称正确存储到链表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57612591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com