为什么argv不起作用

Why does not argv work?

本文关键字:不起作用 argv 为什么      更新时间:2023-10-16

我是cpp的初学者,下面的代码有问题。通常,它应该根据argv[1]显示文本,但不显示任何内容。

我做错了什么?

#include <stdio.h>
int main (int argc, char* argv[])
{
  if(argv[1] == "a" && argc > 1)  printf("hello world, argc: %dn", argc);
  else if(argv[1] == "2" && argc > 1) printf("hello everyone, argc: %dn", argc);
  for(int i=0; i<argc; i++) printf("%sn", argv[i]);
  return 0;
}

使用strcmp,以下代码应该可以工作:

#include <stdio.h>
#include <string.h>
int main (int argc, char* argv[]) {
  if(argc > 1 && strcmp(argv[1], "a") == 0) {
      printf("hello world, argc: %dn", argc);
  } else if(argc > 1 && strcmp(argv[1], "2") == 0)  {
      printf("hello everyone, argc: %dn", argc);
  }
  for(int i=0; i<argc; i++) printf("%sn", argv[i]);
  return 0;
}

由于问题被标记为C++,所以使用类似以下内容来更像C++

#include <iostream>
#include <string>
int main (int argc, char* argv[]) {
  if(argc > 1) {
      std::string argv1(argv[1]);
      if (argv1 == "a") {
          std::cout << "hello world, argc: " << argc << std::endl;
      } else if (argv1 == "2") {
          std::cout << "hello everyone, argc: " << argc << std::endl;
      }
  }
  for(int i=0; i<argc; i++) {
      std::cout << argv[i] << std::endl;
  }
  return 0;
}

代码中最重要的两个问题:

  • 在检查参数之前,应检查参数的数量
  • 字符串使用标准库函数(如strcmp())进行比较或者如果您知道最大长度,甚至更好的CCD_ 5

这是一个有效的C代码。希望得到帮助。

#include <stdio.h>
#include <string.h>
int main (int argc, char* argv[])
{
    if ((argc > 1) && ((strcmp(argv[1], "a") == 0)))
    {
        printf("hello world, argc: %dn", argc);
    }
    else if ((argc > 1) && (strcmp(argv[1], "2") == 0))
    {
        printf("hello everyone, argc: %dn", argc);
    }
    for (int i = 0; i < argc; i++)
        printf("%sn", argv[i]);
    return 0;
}

字符串比较的一些细节。如果您在这里使用==运算符(如果您没有重载它),您只需比较对象地址(仔细看,在这两种情况下都有char *)。显然,字符串文字和参数缓冲区有不同的地址。您需要比较内容。实际上,在C++中,您可以构造std::string并使用比较运算符。

因此,另一个更多基于==运算符的C++解决方案

#include <stdio.h>
#include <string>
int main (int argc, char* argv[])
{
    if ((argc > 1) && (std::string(argv[1]) == "a"))
    {
        printf("hello world, argc: %dn", argc);
    }
    else if ((argc > 1) && (std::string(argv[1]) == "2"))
    {
        printf("hello everyone, argc: %dn", argc);
    }
    for (int i = 0; i < argc; i++)
        printf("%sn", argv[i]);
    return 0;
}