2016-07-27 21 views
0

私はargv [1]を使ってテキストファイルを読み込もうとしています。 argcをビルドした後の私のコードでは、ファイルが検出されないことを意味するだけです。私は私が1より大きいのargcの値を取得し、ファイルの内容を読んでくださいどのように把握することはできませんよ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]; 

} 

:以下の私のコードを見てください?

+1

プログラムの実行に使用したコマンドは何ですか?つまり、 'myexe.exe ????' – NathanOliver

+0

引数を渡してargcの値を1以上にします。どのようにするかは、プログラムを実行するために使用するシェルまたはIDEによって異なります。 – MikeCAT

+4

'argv [1]'は直接使用でき、このコピーはバッファオーバーランを許すので、 'msg'をこのように使用しないでください。 – 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をコピーする必要はありません。 ]、それを直接使用してください...

+0

ドラッグ&ドロップを試しましたが、うまくいきません。完全なパスでは、それを引数として使用するのか、単にファイル名を引数として使用するのですか? –

+0

それがうまくいかない場合、何かが間違っている、私はすべての引数のためにお勧めします: (int i = 0; i user5962153

+0

あなたのcoutがあなたのファイルのための正しいパスを表示するが、FILE *ファイルの場合、あなたのファイルはおそらく他のアプリケーションによって開かれています。 – user5962153

関連する問題