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在每个末尾添加一个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

问题是您用来运行它的命令。正如你评论的:

我运行程序>测试你好或>测试你好,输出什么都没有

>正在重定向输出,最终没有给你命令行参数。您想要的只是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 回答