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]、未定義の動作が発生する可能性があります。