2016-07-27 103 views
0

我正在嘗試使用argv [1]讀取文本文件。在我的代碼構建argc後仍然只有1,這意味着文件沒有被檢測到。請參閱下面我的代碼:使用argv讀取文本文件

#include <iostream> 
#include <string.h> 
#include <fstream> 
using namespace std; 
int main(int argc, char **argv) { 
    char msg[256]={0}; 
    if (argc < 2){ 
     cout<<"file not found"; 
    } 
    if(argc > 1){ 
     strcpy(msg,argv[1]); 
    } 
    FILE *file; 
    if ((file = fopen(argv[1], "r")) == NULL) 
     { 
      printf("file doesnt exist\n"); 
     } 
    fclose(file); 

    cout<<argv[1]; 

} 

我無法弄清楚如何得到ARGC大於1的值,然後讀取該文件的內容?

+1

你用來運行程序的命令是什麼?即'myexe.exe ????' – NathanOliver

+0

傳遞參數以獲取argc的值大於1.如何實現它取決於您用於運行程序的shell或IDE。 – MikeCAT

+4

您不應該像這樣使用'msg',因爲'argv [1]'可以直接使用,並且這個複製允許緩衝區溢出。 – MikeCAT

回答

0

的argc保持爲1只,這意味着未檢測

如果是的argc 1的文件,這意味着沒有(命令行)參數被賦予給程序。我建議你改變回應消息以反映這一點。

我怎麼得到的argc大於1

你需要傳遞參數給程序的價值。在命令行,你做這樣的:

> ./program_file_name value_of_first_argument 

如果從IDE啓動該程序,再看看如何設置命令行參數啓動IDE手冊。


請注意,如果參數在程序中超過了256個字符,那麼您的緩衝區溢出且行爲未定義。

+0

我正在使用eclipse,並且在運行配置中,我已經將工作目錄設置爲我的文件存在的位置以及我指定了文件名的參數。輸出結果是我在參數中指定的文件名。在Eclipse中有沒有特定的方法? –

0

你有沒有試過將你的文件拖放到你的應用程序?這應該給你argv [1],如果拖放不起作用(它應該工作),那麼出現問題

或嘗試使用完整路徑,你並不需要複製argv [1 ],直接使用它...

+0

我試過拖放,但它似乎並沒有工作..通過完整的路徑你的意思是使用它作爲參數或只是文件名作爲參數? –

+0

如果它沒有工作,出現了問題,我建議關閉所有參數: for(int i = 0; i user5962153

+0

如果您的cout顯示文件的正確路徑,但爲NULL inf FILE *文件,那麼您的文件可能由其他應用程序打開。 – user5962153