0

C アプリケーションをビルドしました。ビルドするとエラーは表示されませんが、実行すると「Segmentation Fault: 11」というエラーが表示されます。それが役立つ場合、ここに私が使用しているコードがあります:

#include <stdio.h>
int main(char *argv[]) {
printf("The project path is: ./Projects/%c", argv[1]);
return 0;
}
4

5 に答える 5

3

mainプロトタイプ化された正しい構文は次のとおりです。

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

また%c、変換指定で文字をprintf出力し、文字列を出力するには を使用します%s

于 2012-04-10T09:39:48.277 に答える
1

いくつかの問題があります。

  • のシグニチャーmainは、引数カウントとそれに続く C 文字列の配列です。
  • 配列を使用する前に、常にカウントを確認する必要があります。
  • %s配列は文字列なので、印刷する必要があります。

これはうまくいくはずです:

#include <stdio.h>
int main(int argc, char *argv[]) {
    if (argc < 2)
        fprintf (stderr, "Wrong number of arguments\n");
    else
        printf ("The project path is: ./Projects/%s\n", argv[1]);
    return 0;
}
于 2012-04-10T09:43:05.090 に答える
0

他の提案に加えて、printf 形式を再検討する必要がある場合があります。%cは単一の文字を印刷するために使用され、argv[1]char *です。またはそのようなものを使用するargv[1][0]か、文字列書式指定子%s.

于 2012-04-10T09:42:22.510 に答える
0
  1. 署名をに変更しますint main(int, char*[]);
  2. プロセスに渡す引数は何ですか? 合格していない場合argv[1]は範囲​​外です
于 2012-04-10T09:40:04.743 に答える
0

まず、メインを次のように変更します。

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

第 2 に、printf に渡すものと、渡すように伝えたものとの間に不一致があります。文字ではなく、文字へargv[1]ポインタです。%s 変換を使用して出力する必要がある/使用したい場合:

printf("The project path is: ./Projects/%s", argv[1]);

この特定のケースでは、十分な引数をチェックすることは実際には必須ではありません。コマンド ライン引数を渡さなくても、null ポインターargvが少なくともargv[0]続くためです。そのため、使用argv[1]は安全ですが、コマンド ライン引数を渡していない場合は、 のように出力される場合があります(null)

それにもかかわらず、通常は をargc使用する前にの値を確認する必要がありますargv。この場合、それを回避できますが、多かれ少なかれ偶然にすぎません。同じ方法で使用しようとするとargv[2]、未定義の動作が発生する可能性があります。

于 2012-04-10T09:40:25.350 に答える