繁体   English   中英

main(int argc,char * argv [])不理解

[英]main(int argc, char* argv[]) dont understand

我试图理解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 . 1 b

所以我的问题是。 在这种情况下,此char* argv[]是指针数组吗? 以及如何访问类似bbbbbbb字符串。

提前输入!

在这种情况下,此char * argv []是指针数组吗?

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

特别是根据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());

是现场演示。

如何获取诸如bbbbbbb之类的字符串的访问权限。

当您说:

cout << argv [0] <<''<< argv [1] <<''<< argv [2] << endl;
将显示:./ program 1 bbbbbb

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

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

argc=3

请阅读以下内容以更加清楚: int argc,char * argv []是什么意思?

char * []作为char的指针数组读取。 通常,指向char的指针表示指向以空终止的字符串的指针。 这是按照惯例,当您将char *传递给例程(如cout)时,它将打印char *指向的所有字符,直到到达null为止。

因此,argv [0]指向以char'。'开头的内存地址,此地址之后还有更多字符,直到到达空终止符:“ ./ program \\ 0”。 处理char *的cout例程将打印每个字符,直到null。

当像* argv [0]中那样“取消引用”指向char的指针时,您正在要求返回argv [0]指向的项目。 在这种情况下,*(char *)表示将(char *)指向的字符还给我。 类型此项目的是一个char,又名单个字符。 相反,调用了打印char(这次不打印char *)的cout例程,它仅打印所指向的字符。 在上述情况下,这是一个“。”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM