用于列出目录文件的 C 代码不起作用

C code for listing files of a directory is not working

我正在使用 Windows 10 平台并使用 VS buildtools 编译了以下 C 代码。该代码尝试在给定位置列出 file/folders。编译很顺利,但我没有得到想要的结果。程序写入消息 'Listing files ...',等待一段时间后退出。我在这里做错了什么?

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


int main(int argc, char* argv[]){

HANDLE fhandle;
WIN32_FIND_DATAA* file_details;
int next_file = 1;

char* path = strcat(argv[1], "/*"); 
printf("Listing files for %s\n", path);
fhandle = FindFirstFileA(path, file_details);

if(fhandle != INVALID_HANDLE_VALUE){
    
    while(next_file){
        printf("%s\n", file_details->cFileName);
        next_file = FindNextFileA(fhandle, file_details);   
    }
        
}
else{
    printf("Error!");
}

FindClose(fhandle);
return 0;
}

有两个问题。

首先,你不能通过char* path = strcat(argv[1], "/*"); 将连接的字符串分配给path,因为argv[1]是一个const char *

其次,当你使用WIN32_FIND_DATAA*时,它没有内存space,因此无法获取返回的数据。

这里是修改后的例子:

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


int main(int argc, char* argv[]) {

    HANDLE fhandle;
    WIN32_FIND_DATAA* file_details = (WIN32_FIND_DATAA*)malloc(sizeof(WIN32_FIND_DATAA));
    memset(file_details, 0, sizeof(WIN32_FIND_DATAA));
    int next_file = 1;
    char path[100];
    strcpy(path, argv[1]);
    strcat(path, "/*");
    printf("Listing files for %s\n", path);
    fhandle = FindFirstFileA(path, file_details);

    if (fhandle != INVALID_HANDLE_VALUE) {

        while (next_file) {
            printf("%s\n", file_details->cFileName);
            next_file = FindNextFileA(fhandle, file_details);
        }

    }
    else {
        printf("Error!");
    }
    free(file_details);
    FindClose(fhandle);
    return 0;
}

输出: