C アプリケーションをビルドしました。ビルドするとエラーは表示されませんが、実行すると「Segmentation Fault: 11」というエラーが表示されます。それが役立つ場合、ここに私が使用しているコードがあります:
#include <stdio.h>
int main(char *argv[]) {
printf("The project path is: ./Projects/%c", argv[1]);
return 0;
}
C アプリケーションをビルドしました。ビルドするとエラーは表示されませんが、実行すると「Segmentation Fault: 11」というエラーが表示されます。それが役立つ場合、ここに私が使用しているコードがあります:
#include <stdio.h>
int main(char *argv[]) {
printf("The project path is: ./Projects/%c", argv[1]);
return 0;
}
main
プロトタイプ化された正しい構文は次のとおりです。
int main(int argc, char *argv[]) { ... }
また%c
、変換指定で文字をprintf
出力し、文字列を出力するには を使用します%s
。
いくつかの問題があります。
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;
}
他の提案に加えて、printf 形式を再検討する必要がある場合があります。%c
は単一の文字を印刷するために使用され、argv[1]
はchar *
です。またはそのようなものを使用するargv[1][0]
か、文字列書式指定子%s
.
int main(int, char*[]);
argv[1]
は範囲外ですまず、メインを次のように変更します。
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]
、未定義の動作が発生する可能性があります。