C - opendir 不接受字符串变量,但接受纯字符串



我无法让这个函数工作,因为出于某种原因,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();
char *

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

相关内容

  • 没有找到相关文章

最新更新