main(int argc,char * argv [])不明白

时间:2014-03-17 17:01:15

标签: c++ argv

我想了解int main( argc, char* argv[])的事情。 当我使用像./program 1 bbbbbb这样的参数时 代码:

cout<< argv[0] << ' ' << argv[1] << ' '<<  argv[2] << endl; 

将显示:./program 1 bbbbbb

但在这种情况下:

 cout<< *argv[0] << ' ' << *argv[1] << ' '<<  *argv[2] << endl; 

将显示:. 1 b

我的问题是。在这种情况下,这个char* argv[]是一个指针数组吗?以及如何获取bbbbbbb等字符串的访问权限。

提前Ty!

3 个答案:

答案 0 :(得分:2)

  

在这种情况下,这个char * argv []是一个指针数组。

在这种情况下,char* argv[]是一个以空字符结尾的字符串数组。

具体根据C标准的§5.1.2.2.1/ 2:

  

如果argc的值大于零,则数组成员argv[0]argv[argc-1]包含指向字符串的指针,在程序启动之前由主机环境给出实现定义的值。

  

如果argc的值大于零,则argv[0]指向的字符串表示程序名称;如果程序名称在主机环境中不可用,则argv[0][0]应为空字符。如果argc的值大于1,则argv[1]argv[argc-1]指向的字符串代表程序参数。


  

如何获取像bbbbbbb这样的字符串的访问权限。

我的建议是做一些由于向后兼容而导致C ++无法做到的事情:

std::vector<std::string> args(argc);
std::copy(argv, argv + argc, args.begin());

here是现场演示。

答案 1 :(得分:1)

  

如何获取像bbbbbbb这样的字符串的访问权限。

当您说:

时,您已回答了自己的问题
  

COUT&LT;&LT; argv [0]&lt;&lt; ''&lt;&lt; argv [1]&lt;&lt; ''&lt;&lt; argv [2]&lt;&lt; ENDL;
  将显示:./ program 1 bbbbbb

char* argv[]是一个指针数组,包含命令行参数(包括可删除的名称),argc包含计数。 从上面的例子中,

argv[0] = ./program
argv[1] = 1
argv[2] = bbbb  

argc=3

阅读本文以获得更清晰:What does int argc, char *argv[] mean?

答案 2 :(得分:1)

char * []被读作char的指针数组。通常,指向char的指针表示指向以null结尾的字符串的指针。这是按照惯例,当你将一个char *传递给一个例程,比如cout时,它将打印char *指向的所有字符,直到它达到null。

因此,argv [0]指向一个以char&#39;开头的内存地址。&#39;后面有更多字符,直到它达到空终止:&#34; ./ program \ 0& #34 ;.处理char *的cout例程将打印每个字符,直到null。

当你&#34; dereference&#34;指向char的指针,如* argv [0],您要求返回argv [0]指向的项目。在这种情况下,*(char *)表示返回(char *)指向的字符。此项的类型是char,也称为单个字符。相反,调用打印char(而不是char *此次)的cout例程,它只打印指向的字符。在上述情况下,这是一个&#39;。&#39;。