opendir不接受字符串变量但会接受纯字符串

时间:2015-04-24 05:02:12

标签: c linux directory systems-programming opendir

我无法使用此函数,因为由于某种原因,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();

1 个答案:

答案 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,因此请将该部分放入其他地方