我无法使用此函数,因为由于某种原因,opendir不会正确地将buffer2(声明为char buffer2 [128])作为参数。如果我用“。”之类的东西替换变量。或“样本”,它完美地运作。但是这样做,我每次都会遇到分段错误。请帮忙。
system("clear");
DIR *dirp;
struct dirent *dp;
printf("Enter directory name: ");
fgets(buffer2, 100, stdin);
if((dirp = opendir(buffer2)) == NULL)
printf("Could not open directory\n");
while((dp = readdir(dirp)) != NULL)
printf("%s\n", dp->d_name);
closedir(dirp);
printf("Hit enter to return to selection.");
getchar();
答案 0 :(得分:3)
char * fgets(char * str,int num,FILE * stream);
fgets()
从流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾为止,以先发生者为准。 / p>
换行符使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 directory\n");
else {
while((dp = readdir(dirp)) != NULL)
printf("%s\n", dp->d_name);
closedir(dirp);
}
printf("Hit enter to return to selection.");
getchar();
当opendir
来电失败时,您无需使用readdir
,因此请将该部分放入其他地方