簡體   English   中英

opendir將不接受字符串變量,但將接受純字符串

[英]opendir will not accept string variable but will accept plain string

我無法使此函數正常工作,因為出於某種原因,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();

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 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調用get失敗時,您無需使用readdir因此將該部分放在else中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM