2013-10-27 38 views
0

我試圖打開位於不同目錄中的文件,但我總是收到錯誤消息。我的代碼如下所示:如何在不同的位置打開文件?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
    { 
    FILE *file; 
    char file_name[25]; 

    printf("What file do you want? "); 
    scanf("%s", file_name); 
    file = fopen("Dir1/Dir2/file_name","r"); 

    if(file == NULL) 
    { 
    printf("There is no file by that name\n"); 
    exit; 
} 

我懷疑問題是由於「fopen」部分。如果我輸入文件名(例如file = fopen(「Dir1/Dir2/list.txt」,「r」),那麼它將起作用。但是,我希望用戶輸入文件名。任何幫助將不勝感激!謝謝

+0

您與用戶輸入打交道時作出非常根本的錯誤:如果你不知道你可以用'fgets()'而不是'scanf()'來實現,或者你可以使用一個安全的'scanf '格式字符串,例如'%24s'。 – glglgl

+0

注意:文件名可能包含空格。'scanf(「%s」,file_name)'不會掃描那些到'file_name'。考慮'scanf(「%24 [\^n]」,file_name)'或'fgets()'。 – chux

回答

1

你的代碼試圖打開名爲「FILE_NAME」的文件,我想你的意思是這樣的:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *file; 
    char file_name[25]; 
    char path[80]; 

    printf("What file do you want? "); 
    scanf("%s", file_name); 
    snprintf(path, sizeof(path), "Dir1/Dir2/%s", file_name); 
    // printf("Opening file %s\n", path); 
    file = fopen(path,"r"); 

    if(file == NULL) 
    { 
    printf("There is no file by that name\n"); 
    exit; 
    } 
+0

如果您沒有使用'sprintf()'處理用戶輸入,那麼您的答案將值+1。如果用戶輸入超過80個字符的字符串會怎麼樣? (好吧,在對'path'有影響之前,'file_name'會溢出,但值得一提的是)' – glglgl

+0

你說得對,但由於asker使用scanf,所以我猜測超限並不是主要的關心。將盡管編輯。 – Pat

+3

超頻始終是一個問題恕我直言 - 最好儘早教給初學者正確的東西。 – glglgl

相關問題