2012-04-10 8 views
0

私はCアプリケーションをビルドしましたが、ビルドするとエラーは表示されませんが、実行するとSegmentation Fault:11というエラーが表示されます。 それが助け場合は、ここで私が使用していたコードは次のとおりです。実行時のアプリケーションエラー

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

答えて

1

あなたは多くの問題があります。

  • 署名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; 
} 
+0

を使って入力した文字列を表示しません。私はすべての応答を通過していましたが、誰も試してみましたが、私は%s printfでは%cの代わりに、今から十分なコマンドライン引数があることを忘れないでください。ありがとう:) – Matthew

3

正しいmain構文を試作printf

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

また%c変換指定は、文字列の使用%sを印刷する文字を、印刷しています。

0
  1. 変更するには、プロセスに渡しているどのような引数int main(int, char*[]);
  2. に署名?あなたが最初にどのargv[1]が範囲外である
+0

。しかし、私はargv [1] – Matthew

0

を渡していない場合は、へのあなたの主な変更:

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

0

他の提案に加えて、printf形式を再訪する必要があるかもしれません。 %cは1文字の印刷に使用され、argv[1]char *です。 argv[1][0]などを使用するか、文字列形式指定子%sを使用してください。

関連する問題