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

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

本文关键字:dont understand argv int argc char main      更新时间:2023-10-16

我试图理解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 这样的字符串。

提前!

在这种情况下,这个 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] 指向的字符串表示程序参数。


以及如何访问像 bbbbbb 这样的字符串。

我的建议是做C++不幸的是由于向后兼容性而未能做到的事情:

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

这是现场演示。

如何访问像 bbbbbbb 这样的字符串。

当你说:

cout<<argv[0] <<' ' <<argv[1] <<' '<<argv[2] <<endl;
将显示: ./程序 1 BBBBBB

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

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

argc=3

阅读本文以更清楚:int argc,char *argv[]是什么意思?

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

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

当你"取消引用"指向 char 的指针时,如 *argv[0] 中所示,你要求返回 argv[0] 指向的项目。 在这种情况下,*(char *(说返回(char *(指向的字符。 此项的类型是字符,也称为单个字符。 而是调用打印 char(这次不是 char *(的 cout 例程,它只打印指向的字符。 在上述情况下,这是一个"."。