[英]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.