9

割り当てには、Cプログラムのコマンドライン引数が必要です。以前(C ++で)argc / argvを問題なく使用しましたが、Cスタイルの文字列がこれがどのように機能するかに影響を与えているかどうかはわかりません。これが私のメインの始まりです:

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

  if(argc>1){
    printf("0 is %s, 1 is %s\n",argv[0],argv[1]);
    if(argv[1]=="-e"){
        // Do some stuff with argv[2]
        system("PAUSE");
    }
    else{
        printf("Error: Incorrect usage - first argument must be -e");
        return 0;
    }
  }

そのため、プログラムを「program.exe -e myargstuff」と呼んでいますが、printf()でargv [1]が「-e」であると表示されても、「エラー:不正な使用法...」という出力が表示されます。助けてください。ありがとう!

4

6 に答える 6

16

この線

if(argv[1]=="-e"){

文字列ではなく、ポインタを比較します。代わりにstrcmp関数を使用してください。

if(strcmp(argv[1],"-e")==0){
于 2010-02-20T02:09:35.177 に答える
7

変化する:

if(argv[1]=="-e"){

if(strcmp(argv[1], "-e") == 0){

を含みますstring.h

于 2010-02-20T02:10:26.873 に答える
5

チェックアウトgetopt()および関連する機能。それはあなたの人生をずっと楽にしてくれるでしょう。

于 2010-02-20T02:10:41.650 に答える
3

そのようなc文字列を比較することはできません。strcmpを使用します(ここを参照)。

c文字列は実際にはポインタであるため、==演算子は最初の文字のアドレスを比較しますが、この場合は等しくなりません。

于 2010-02-20T02:10:06.067 に答える
2

Cのような文字列を比較するために使用することはできません==。これは、argv[1]のアドレスとリテラルを比較するだけです。

strcmp代わりに使用してください。例えば:

if (!strcmp("-e", argv[1])) {
于 2010-02-20T02:10:22.900 に答える
1

main関数のプロトタイプは、char*ポインターを処理していることを示しています。Cでは、演算子のオーバーロードはありません。したがって、==2つの間で同じ場所を指しているchar*かどうかをテストします。これは当てはまらず、まったく当てはまらないことはめったにありません。(C ++サイトを指している場合でも、関数の参照は有効です)関数を使用します。strcmp<string.h>

strcmp(argv[1], "-e") == 0
于 2010-02-20T02:10:58.530 に答える