0

コマンド ライン パラメーターを取得できるプログラムを作成しています。基本的に、ユーザーはプログラムを呼び出すときにコマンド プロンプトからファイル名を指定できる必要があります。つまり、プログラムは doCalculation -myOutputfile.txt のようなパラメーターを取り込める必要があります。ここで、doCalculation はプログラムの名前で、myOutputfile は結果を書き込むファイルです (つまり、計算結果を指定されたファイル名に出力します)。

これまでのところ、コマンド プロンプトから関数を呼び出すことができます。プログラムで指定されたファイル名に書き込む方法がわかりません (または、このファイルがまだ存在しない場合は作成します)。

私のコードは次のとおりです。

int main(int argc, char *argv[])
{
    FILE* outputFile;
    char filename;

    // this is to make sure the code works
    int i = 0;
    for (i = 0; i < argc; i++) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }

    //open the specified file
    filename= argv[i];   
    outputFile = fopen("filename", "r");

    //write to file
    fclose(outputFile);
}
4

1 に答える 1

0

それで、私が気づいたことがいくつかあります...

  1. ファイルに書き込みたい場合は、ファイルを開くときに、読み取りモードの "r" ではなく、書き込みモードの "w" を使用します。
  2. filename を文字列へのポインタ (char *) ではなく、1 文字として宣言しました。ポインターにすると、長さが 1 より大きいファイル名が許可されます (単一の文字ではなく、文字の配列)。
  3. Ashwin Mukhija が述べたように、for ループが 2 に設定された後に i を使用していますが、実際には 2 番目 (インデックス 1) の引数が必要です。
  4. ファイル名変数ではなく、文字通りの「ファイル名」として open() 関数にファイル名引数がありました。

このコードが問題の解決に役立つかどうかを確認してください (ファイルに書き込む方法を示すために、そこに fprintf() も投げました)。乾杯!

int main(int argc, char *argv[])
{
    FILE* outputFile;
    char* filename;

    // this is to make sure the code works
    int i = 0;
    for (i = 0; i < argc; i++) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }

    //saftey check
    if(argv[1])
    {
        filename = argv[1];

        //open the specified file
        outputFile = fopen(filename, "w");

        fprintf(outputFile, "blah blah");

        //write to file
        fclose(outputFile );
    }

    return 0;
}
于 2013-02-16T21:01:25.207 に答える