仅使用标准库是无法做到这一点的;标准 C 不了解目录。但是,每个操作系统都有执行此操作的方法,因此您需要为您的检查器(Windows、Linux 等)找到操作系统系列,并查找如何为该操作系统执行此操作。
操作系统内置的库必须可用,因为它们是系统自带的。没有它们,您根本无法运行任何程序。(这在技术上是不正确的,但它足以涵盖所有有趣的案例。)
编辑:如果您的检查器在 Windows 下运行(从您的评论来看),您将需要使用FindFirstFileand FindNextFile。不过,它们确实依赖于句柄(就像几乎所有的 Windows API 一样),所以你必须研究一下。(句柄只是一个对 Windows 内核具有特殊含义的不透明指针。您可以将其视为void *. 不要太专注于数据类型。)
编辑 2:如果您正在寻找可以帮助您入门的东西:
char ** list_directory (const char * directory) {
char * search_path = malloc(strlen(directory) + 3);
strcpy(search_path, directory);
strcat(search_path, "\\*");
WIN32_FIND_DATA fd;
SetLastError(0);
HANDLE hsrch = FindFirstFile(search_path, &fd);
free(search_path);
if (hsrch == INVALID_HANDLE_VALUE) {
if (GetLastError() != ERROR_FILE_NOT_FOUND) return NULL;
SetLastError(0);
return calloc(1, sizeof(char *)); // no files
}
char ** result = malloc(sizeof(char *));
unsigned count = 0;
while (!GetLastError()) {
result[count] = malloc(strlen(fd.cFileName) + 1);
strcpy(result[count ++], fd.cFileName);
FindNextFile(hsrch, &fd);
result = realloc(result, (count + 1) * sizeof(char *));
}
if (GetLastError() == ERROR_NO_MORE_FILES)
SetLastError(0);
FindClose(hsrch);
result[count] = NULL;
return result;
}