2015-04-16 59 views
-1

我閱讀了所有可以找到的線索,但找不到相當的答案 - 所以我希望這不會被視爲重複。將輸入文件名保存爲字符串? C

我的任務需要讀取文件,進行字符串比較以及打印出該文件的名稱。

這是很基本的和輸出僅僅是以下格式:

*File where answer was found* 
**Input1.txt** < file name 

有沒有辦法將文件名保存爲一個字符串,當我在文件中讀?我對C非常陌生,所以我發現很多答案(從文件描述中得到它)等等。

謝謝!

編輯 - 我對我缺乏的信息表示歉意。我一直在思考這個問題。我一直在尋找的只是:

char filename[] = "input1.txt"; 
FILE *input = fopen("input1.txt","r"); 
+0

你認爲你打算首先打開一個文件來閱讀嗎?你需要它的名字,作爲一個字符串。沒有理由爲什麼你需要失去它。 –

+0

如果你需要C語言的答案,那麼你將會在別處讀到同樣的東西。你到底想要什麼? – Prabhu

+0

看看'fopen''fgets'' strcmp'如果你想搜索文件,你可以使用'glob' –

回答

1

好,爲了打開一個文件,你必須通過它(字符*)作爲參數的fopen或打開...

爲什麼你不保留這個字符串(文件名),直到你完成查找關鍵字並在需要時顯示它。

爲爲例,如果你打開這樣的文件:

char file_name[] = "file.txt"; FILE *fp = fopen(filename,"r"); //讀取

打開文件名//在這裏檢查,如果該文件包含關鍵字 //如果是這種情況,你的顯示文件名

printf("%s",filename);

如果你正在使用sys呼叫「打開」每一件事情將是相同的,但你會與文件描述符打交道,而不是文件足尖r,

欲瞭解更多信息,請閱讀fopen/open手冊。

+0

這正是我想弄明白的!謝謝!我猜想我對此太在意了,並沒有意識到它有多簡單。再次感謝! – bravesaint

1

儘管你的問題有點含糊,我想回答如下;

首先,你要在類Unix操作系統的終端上執行這些操作,對吧?因此,I/O重定向可能會成爲你的朋友。你的標準的C程序的入口點是這樣的:

int main(int argc, char* argv[]) { // ... }

第一個參數,argc代表的輸入參數總數(參數計數)。主函數argv的第二個參數代表參數向量(或簡單地說是一個參數數組),允許您從終端的stdin(默認重定向到鍵盤)輸入參數,這意味着執行C程序,你可以在外部輸入參數或者在類Unix系統中使用pipes,這要歸功於Douglas McIlroy,他們發明並堅持在Unix中開發這個概念。

int main(int argc, char* argv[]) 
{ 
    printf("%s\n", argv[1]); 
    return 0; 
} 

在終端:

$> ./program filename.txt 

filename.txt 

其實代碼示例上面。因此,在你的程序中,你可以通過鍵盤輸入字符這樣的打印參數(技術上稱爲選項)只是一個示範。實際上,你不應該用這種方式編寫程序。在這一點上,我想向您介紹一下getopt函數,它們可以正確解析命令行選項。

現在,根據你的問題,我想你正在嘗試做這樣的事情:

// pseudo-code sample: 
main() 
{ 
    get_filename_to_search(); 
    compare_filename_with_others(); // I suppose, you're reading these names from a file 
    if(filename_found == true) 
    print(file_name); 
    exit(); 
} 

我不會寫完整的C代碼上面爲您的邏輯如下。因爲這是你的任務,你需要自己研究和完成。不過,我可以爲您提供一些提示。您可以通過研究這些功能點連接起來,這裏的一些人:getopt的的fopenFCLOSEFREADSTRCMP的printf退出。我希望,我的帖子會對你有所幫助,祝你好運。

+0

非常感謝您提供令人難以置信的詳細回覆!我仍然不完全瞭解你寫的所有內容,但會花時間研究它並進行更多的研究!再次感謝你!! – bravesaint