私は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
ためには、C文字列の配列に続く引数の数です。%s
が必要です。これは動作するはずです:私はプロジェクト名であるプログラムに1つの引数を渡しています
#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;
}
正しいmain
構文を試作printf
で
int main(int argc, char *argv[]) { ... }
また%c
変換指定は、文字列の使用%s
を印刷する文字を、印刷しています。
int main(int, char*[]);
argv[1]
が範囲外である。しかし、私はargv [1] – Matthew
を渡していない場合は、へのあなたの主な変更:
int main(int argc, char *argv[])
第二に、あなたはprintf関数に渡しているものとの間に不一致があり、何あなたが渡すつもりだと言った。 argv[1]
は、文字ではなくポインタです。あなたはそれをプリントアウトして%sの変換を利用したい/必要があります。
printf("The project path is: ./Projects/%s", argv[1]);
、あなたが任意のコマンドライン引数を渡さない場合でもので、それは、十分な引数をチェックするために、実際には必須ではありません、 argv
は、少なくともargv[0]
を含み、その後にヌルポインタが続きます。したがって、argv[1]
を使用することは安全ですが、コマンドライン引数を渡さなかった場合は、(null)
のように印刷されることがあります。
argv
を使用する前に、argc
の値を確認するのが一般的です。この場合、あなたはそれを離れて逃げることができますが、事故によって多かれ少なかれます。同じ方法でargv[2]
を使用しようとすると、未定義の動作が発生する可能性があります。
他の提案に加えて、printf形式を再訪する必要があるかもしれません。 %c
は1文字の印刷に使用され、argv[1]
はchar *
です。 argv[1][0]
などを使用するか、文字列形式指定子%s
を使用してください。
を使って入力した文字列を表示しません。私はすべての応答を通過していましたが、誰も試してみましたが、私は%s printfでは%cの代わりに、今から十分なコマンドライン引数があることを忘れないでください。ありがとう:) – Matthew