我无法让这个函数工作,因为出于某种原因,opendir 不会正确地将 buffer2(声明为 char buffer2[128])作为参数。如果我用"."或"sample"之类的东西替换变量,它可以完美地工作。但是这样做,我每次都会遇到分段错误。请帮忙。
system("clear");
DIR *dirp;
struct dirent *dp;
printf("Enter directory name: ");
fgets(buffer2, 100, stdin);
if((dirp = opendir(buffer2)) == NULL)
printf("Could not open directoryn");
while((dp = readdir(dirp)) != NULL)
printf("%sn", dp->d_name);
closedir(dirp);
printf("Hit enter to return to selection.");
getchar();
fgets ( char * str, int num, FILE * stream );
fgets()
从流中读取字符并将其作为 C 字符串存储到 str 中,直到读取 (num-1) 字符或到达换行符或文件末尾,以先发生者为准。
换行符使 fgets 停止读取,但它被函数视为有效字符,并包含在复制到 str 的字符串中。
终止空字符会自动附加到复制到 str 的字符之后。
因此,您需要从文件名中删除该n
,然后将其传递给opendir()进行进一步处理。
system("clear");
DIR *dirp;
struct dirent *dp;
printf("Enter directory name: ");
fgets(buffer2, 100, stdin);
// Lets remove tailing n from buffer2
strtok(buffer2, "n");
if((dirp = opendir(buffer2)) == NULL)
printf("Could not open directoryn");
else {
while((dp = readdir(dirp)) != NULL)
printf("%sn", dp->d_name);
closedir(dirp);
}
printf("Hit enter to return to selection.");
getchar();
当opendir
调用 get 失败时,您不需要使用readdir
因此将该部分放入 else