在int main中的argv[]是否应该总是char*类型(如果使用argv则为char**类型)?
C++ - Should argv[] in the int main be always of the type char* (or char** if argv is used)?
我理解,因为argc
是参数的数量,它可以是一个int。但是为什么argv
是char pointer
型的呢?这是否意味着我不能传递一个整数参数并在数学运算中使用argv[1]
?
Edit:为了更清楚,是否可以写int* argv[]
。argv
是否已经定义为char*
类型,因此不能更改?
实际上main
有两种有效的定义:
int main() { /* ... */ }
和
int main(int argc, char *argv[]) { /* ... */ }
或同等学历。(注意,作为形参,char *argv[]
相当于char **argv
,后者更准确地表示了它的含义,即指向指向char
的指针的指针。)
实现可以(但不要求)支持其他表单;例如,一些系统支持额外的char *envp[]
参数。
main
的不寻常之处在于它没有一个有效的定义。它不像其他用户定义的函数,它没有无穷多个函数。例如,您可以随意定义一个名为foo
的函数。main
的定义是受限的,因为它是程序的入口点,调用环境必须知道如何调用它。
这在ISO c++标准的3.6.1节中有更详细的介绍。N4296是2014年版的草案。
如果要将整数作为命令行参数传递,请将其作为字符串传递,然后解析它们。(atoi()
函数是最简单的方法之一,但它不做任何错误检查。在c++ 11开头的<string>
头文件中定义的std::stoi()
函数更好。)
main
函数接受一个字符串列表(严格地说,一个指向char*
指针数组初始元素的char**
指针,每个指针都指向字符串的开头),因为它是一个非常灵活的数据结构,但它并不过于复杂。(注意这里的"string"是一个C风格的字符串,一个以' '
null字符结束的字符序列——不要与c++标准库定义的std::string
类型混淆。)
有各种用于解析命令行参数的开源库。例如,类unix系统有一个getopt()
函数;详细信息请参见其文档。
- 将 char* argv[] 转换为 wstring
- 视频捕获与" int main(int argc, char **argv) "
- 为什么现代C 仍然保留旧的C样式原型,用于int argc,char ** argv
- 作为参数的'char *args[]'和'char **argv'之间的差异
- 函数main中的参数argv(int argc,char *argv [])
- C++ (int getopt(argc, (char **)argv, optstring)
- C++ 从节点模拟 int main(int argc, char *argv[])
- char *argv []和int argc c 的全局覆盖范围
- 比较终端中通过char *argv []的参数
- 在代码中设置 char** argv
- 'int main(int argc, char* argv<::>)' 如何成为 main 的有效签名?
- C++ int main (int argc, char *argv[]) - 是 argv a c 样式数组
- 如何使用int main(int argc,char*argv[])运行c++proram
- 绕过 SDL2 中的"int main(int argc, char** argv)"
- 使用char*argv[]而不是char*argv[]有很大的原因/区别吗
- int main(int argc,char* argv[]) 为什么 argc 给出 2 个参数
- OpenCV中int main(int argc,char**argv)中argc和argv的意义
- 当我将字符串文字分配给static char*argv[]时,如何防止编译器发出警告
- C/C++ char **argv VS *argv[]
- 使用 int main(void) 编译失败;main(int argc, char *argv[]) successs