0

誰かが私にここの問題を指摘できますか? これはコンパイルされますが、何も出力されません。コマンドライン引数の文字列を文字列「hello」と比較する必要があります。ありがとう!

  #include <stdio.h>
  #include <string.h>

  int main(int argc, char *argv[])
  { 
      if (argc == 0) 
      {
        printf("No arguments passed!\n");
      }

      char *str = argv[1];
      if(strcmp("hello", str)==0)
      {
        printf("Yes, I find it");     
      }

      else
      {
        printf("nothing"); 
      }

    return 0;
  }
4

4 に答える 4

2

私の ESP では、これを Microsoft Studio などの対話型エディター/デバッガーで実行することをお勧めします。コマンドライン パラメーターを渡すように環境を構成していない可能性があるためnothing、出力として表示されることを期待しています。

ただし、存在しない にアクセスargv[1]すると、seg-fault が発生し、出力が得られる前にプログラムが異常終了します。

これを修正するには、argcfirst の値を確認し、無効なメモリにアクセスしないようにします。

また、バッファリングされた出力をコンソールにフラッシュするのに役立つよう\nに、それぞれの最後にa を配置することをお勧めします。printf

int main(int argc, char *argv[])
  {
      if (argc == 0) 
      {
        printf("No arguments passed!\n");
      }
      else if(strcmp("hello", argv[1])==0)
      {
        printf("Yes, I find it\n");     
      }

      else
      {
        printf("nothing\n"); 
      }

    return 0;
  }

これを実行すると、次のように表示されます。

$prompt:  myprogram
No arguments passed!

$prompt:  myprogram hello
Yes, I find it

$prompt:  myprogram world
nothing
于 2012-10-15T18:13:28.843 に答える
0

問題は、それを実行するために使用しているコマンドです。あなたがコメントしたように:

プログラム>testhelloまたは>testhiを実行しましたが、出力は何もありません

>出力をリダイレクトしており、最終的にコマンドライン引数を提供しません。必要なのはprogram hello、出力リダイレクトなしです。

于 2012-10-15T18:15:13.503 に答える
0
#include <stdio.h>
#include <string.h>

  int main(int argc, char *argv[])
  {
    if (argc < 2 || 0 != strcmp("hello", argv[1]))
        printf("nothing\n");     
      else
        printf("yes, found it\n"); 

    return 0;
  }

と出力

bash-3.2$ gcc 1.c -o 1
    bash-3.2$ ./1 hello1
    nothing
    bash-3.2$ ./1 hello
    yes, found it
    bash-3.2$ ./1
    nothing
于 2012-10-15T18:19:16.330 に答える
0

プログラムを「テスト」とは別の名前にしてみてください

于 2012-10-15T18:28:13.923 に答える