1

私は次の簡単なプログラムを持っています。また、コマンドラインから「programfile.txt」を実行しているのですが、出力なしで「バスエラー」が発生します。ここで何が間違っているのかわかりません。

#include<stdio.h>

int main(char *arg[])
{

    FILE *file = fopen(arg[0], "r");

    if (file == NULL) {
        printf("Cannot open file.\n");
        exit(1);
    }

    return 1;
}
4

4 に答える 4

3

cエントリ関数のプロトタイプは次のとおりです。

int main(int argc, char *arg[]);

したがって、プロトタイプでは、実際にintを逆参照してfopenに渡すことを 試みています。
代わりにこれを試してください

#include<stdio.h>
int main(int argc, char *argv[])
{
    FILE *file = fopen(argv[1], "r");
    if (file == NULL) {
        printf("Cannot open file.\n");
        exit(1);
    }
    return 1;
}
于 2012-06-05T02:57:59.797 に答える
2

mainのタイプがであると仮定して、arg[0]の値を出力できますか

int main(int argc, char* argv[])

argv [0]はプロセスの名前であり、argv[1]は最初の引数です。

于 2012-06-05T02:56:23.320 に答える
1

の標準プロトタイプは次のmain()ようになります。

int main(int argc、char * argv []);

あなたはmain()たった1つの引数であなたを宣言しましargvた。しかし、システムは最初の引数として引数の数を渡します。

単一の引数(ファイルfile.txt)を指定すると、argcは1に設定されます。ただし、プログラムは整数1をとして使用しようとしていますchar **。それはバスエラーを与えます。

動作するプログラムの編集バージョンは次のとおりです。

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

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

    FILE *file;

    if (argc != 2)
    {
        fprintf(stderr, "Usage: myprogram <filename>\n");
        exit(1);
    }

    file = fopen(argv[1], "r");

    if (file == NULL) {
        fprintf(stderr, "Cannot open file.\n");
        exit(2);
    }

    exit(0); // status 0 to signal no error
}

変更点:

  • #include <stdlib.h>の宣言を取得するために追加しましたexit()

  • 引数の数を確認し、正しくない場合はUsage:文字列を出力します。

  • エラーメッセージstderrを標準出力の代わりに印刷しました。

  • プログラムが正常に終了していることを明確にするためにに変更return 1しました。exit(0)

于 2012-06-05T02:58:29.493 に答える
0

argv[0]アプリケーション名が含まれています。argv[1]代わりに使用してみてください。

于 2012-06-05T02:59:44.520 に答える