C++ int main(int argc,char**argv)在Cpp中不起作用

C++ int main(int argc,char**argv)在Cpp中不起作用,c++,C++,我正在尝试使用这个简单的程序: int main (int argc, char** argv) { cout<<"This program has "<<argc<<" arguments."; } 似乎什么都不管用!顺便说一句,我的编译器是DEV.您实际上没有提供显示问题的代码,但为了回答您的问题,将argv[2]作为字符串传递给函数的方法包括 #include <cstring> #i

我正在尝试使用这个简单的程序:

int main (int argc, char** argv)
{
    cout<<"This program has "<<argc<<" arguments.";
}

似乎什么都不管用!顺便说一句,我的编译器是DEV.

您实际上没有提供显示问题的代码,但为了回答您的问题,将argv[2]作为字符串传递给函数的方法包括

  #include <cstring>
  #include <iostream>
  void func(const char *s)
  {
       //  treat s as a zero terminated string

       if (std::strcmp(s, "Hello") == 0)
       {
            std::cout << "You said hello\n";
       }
  }

  int main(int argc, char **argv)
  {
      if (argc >= 3)
        func(argv[2]);
      else
         std::cout << "You have not supplied an argv[2]\n";
  }
#包括
#包括
void func(常量字符*s)
{
//将s视为以零结尾的字符串
如果(std::strcmp,“Hello”)==0
{
标准::cout=3)
func(argv[2]);
其他的
STD::CUT< P> C++标准说:

argc
应为从 运行程序的环境。如果
argc
为非零 参数应通过
argv[argc-1]
as在
argv[0]
中提供 指向以null结尾的多字节的初始字符的指针 字符串(ntmbs)(20.4.2.1.5.2)和
argv[0]
应是指向 ntmbs的初始字符,表示用于 调用该程序或
。argc的值应为非负
argv[argc]
的值应为
0
[注:建议 在argv之后添加更多(可选)参数。-结束注释]

在大多数情况下,第一个参数是可执行文件的名称。类似于
foo.exe
。进一步的值通常是在运行应用程序时传递给应用程序的命令行参数。因此,如果像以下方式运行应用程序:

foo.exe arg1 arg2 arg3
变量的值可以是:

argc = 4
argv = { "foo.exe", "arg1", "arg2", "arg3", NULL }

请注意,argv以null结尾。

您问题的核心是,即使您没有提供任何参数,为什么将
argc
设为1。
如果你想做更多的实验,你会注意到你总是比你给出的论点多得到一个。
这是因为在大多数环境中,第一个参数
argv[0]
用可执行文件名填充。您也可以通过输出
argv[0]
来检查这一点
您在命令行上给出的参数从<>代码> ARGV(1)< /C>开始,在C++的零基索引计数世界中当然是第二个。

< P>如果您提供的代码是您真正拥有的代码,我不知道它是如何编译的,而不包括IoSoad头。这个代码将工作:

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

std::cout前四个选项都是等效且有效的,而第五个选项是错误的。如果您没有得到任何输入,则说明您没有以正确的方式提供输入。第一个参数(
argv[0]
)是程序的名称,因此
argc
将始终至少为1。您提供的输入是什么,如何提供?不要让人们猜测。不要说“不清楚”之类的话或者;解释您是如何检查
argv
的。您的程序工作正常,您的期望是错误的。
argc
的值始终至少为一,因为程序名是第一个参数。(您可以尝试打印
argv[0]
的值,以了解发生了什么情况)。“顺便说一句,我的编译器是DEV”那不是一个已知的编译器。我猜你是指Devblocks IDE。
foo.exe arg1 arg2 arg3
argc = 4
argv = { "foo.exe", "arg1", "arg2", "arg3", NULL }
$ nameofexecutable
This program was given 1 arguments.
$ nameofexecutable opt1 opt2 opt3
This program was given 4 arguments.