gpt4 book ai didi

无法将正确的文件目录输出到带有 .cFileName 的链接列表

转载 作者:行者123 更新时间:2023-11-30 17:19:39 28 4
gpt4 key购买 nike

我正在尝试创建一个链接列表,其中各个节点具有我的文件夹中的文件名。对于每个附加文件夹,我想输出整个链接列表以及先前已加载文件的名称。我的 C:\Intel 文件夹中有 2 个文件 - ExtremeGraphicsLogs。这是我的全部代码。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

typedef struct item{
char *data;
struct item *next;
} tItem;

int insert(char *x, tItem **top){
tItem *temp = (tItem *)malloc(sizeof(tItem));
temp->data = x;
temp->next = *top;
*top = temp;
tItem *iterator;
iterator = *top;
while(iterator!=NULL){//display whole linked list
printf("\n\tNode data: %s, node next:0x%x\n", iterator->data, iterator->next);
iterator = iterator->next;
}
return 0;
}

int main()
{
tItem *head = NULL;
WIN32_FIND_DATA FindFileData;
HANDLE hFind, hFind_2;

hFind = FindFirstFile("C:\\Intel\\*.*", &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{ printf ("FindFirstFile failed (%d)\n", GetLastError());
return;}
else
{
while (FindNextFile(hFind, &FindFileData))
{
printf ("\n\nNext file found is %s\n", FindFileData.cFileName);
insert(FindFileData.cFileName, &head);
}
FindClose(hFind);
}
return 0;
}

输出为:

Next file found is ..

Node data: .., node next:0x0

Next file found is ExtremeGraphics

Node data: ExtremeGraphics, node next:0x330f80

Node data: ExtremeGraphics, node next:0x0

Next file found is Logs

Node data: Logs, node next:0x330fa0

Node data: Logs, node next:0x330f80

Node data: Logs, node next:0x0

我不知道为什么在 LogsExtremeGraphics 的情况下,它为每个节点提供相同的 -> 数据值,我我不会在任何地方覆盖它。

感谢您的建议。

最佳答案

保存文件名时,您将在链接列表中存储指向查找数据结构的cFileName成员的指针。所有列表元素都将指向那里。

cFileName 成员变量将被后续调用 FindNextFile() 使用新找到的文件名覆盖。由于列表元素都指向那里,因此打印它们将重复打印姓氏。

要真正保存文件名,您必须在列表中存储 cFileName 的副本,例如使用 strdup() 创建的副本。

关于无法将正确的文件目录输出到带有 .cFileName 的链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28824617/

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