怎么理解int main(int argc,char **argv)

2024年12月02日 15:59
有3个网友回答
网友(1):

1、argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如:
int   main(int   argc,   char*   argv[])
{
int   i;
for   (i   =   0;   icout<cin>>i;
return   0;
}  

2、 执行时敲入
F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE   aaaa   bbb   ccc   ddd
输出如下:
F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE
aaaa
bbb
ccc
ddd  

3、char   *argv[]是一个字符数组,其大小是int   argc,主要用于命令行参数   argv[]   参数,数组里每个元素代表一个参数;比如你输入  :

test 

a.c   b.c   t.c

argc   =   4

argv[0]   =   "test"
argv[1]   =   "a.c"
argv[2]   =   "b.c"
argv[3]   =   "t.c"

4、argc记录了用户在运行程序的命令行中输入的参数的个数。  

arg[]指向的数组中至少有一个字符指针,即arg[0].他通常指向程序中的可执行文件的文件名。在有些版本的编译器中还包括程序文件所在的路径。

5、在调用一个可执行程序时,某些情况下需要向程序传递参数。如我们可以在控制台中键入notepad.exe,
回车后将执行记事本程序。如果我们希望在打开notepad时同时打开一个文本文件,可以在notepad.exe  
后面跟上文件的路径和名字,如notepad.exe   example.txt(文件在当前路径)。  


扩展资料

main函数的参数列表保存了输入参数的信息,第一个参数argc记录了输入参数的个数,  第二个参数是字符串数组的,字符串数组的每个单元是char*类型的,指向一个c风格字符串。  

以notepad.exe   example.txt为例  argc是2,就是说argv数组中有两个有效单元  

第一单元指向的字符串是"notepad.exe"  ; 第二单元指向的字符串是"example.txt"  

argv数组中的第一个单元指向的字符串总是可执行程序的名字,以后的单元指向的字符串依次是程序调用时的参数。  

这个赋值过程是编译器完成的,我们只需要读出数据就可以了。

参考资料

百度百科-main函数

网友(2):

  1. main 前面的 int 则说明main函数返回值是整形,一般是正常退出返回0,异常则是-1.

  2. 参数 argc 则是表示 argv 的个数.

  3. argv 则是命令行参数. 这个参数是通过命令提示符窗(Linux 称为终端)口运行程序,以空格区分参数格式带入的。例如编译java文件时:

    javac  Test.java  (这里的 javac 就是程序,argc = 1,  argv[0] = "Test.java")

网友(3):

唉要喂!!
1,首先矫正一下:int main(int argc, char **argv)是正确的方式。而int main(int argc, char *argv)你从哪里看来的??那是不正确的,或者是书上笔误,不要被它愚弄了。

2,你首先要弄明白一个问题, "hello world" 这个字符 常量 的返回值是什么!!
一个字符串常量的返回值是char*, 反之你也可以用char*去存取字符串。

3, 现在char **argv 就好理解了,它就是一个指向字符串的指针。 当你在终端打入 Leds led_no 0 时,argv[0]就是Leds,argv[1]就是led_no, argv[2]就是 0; 如果你熟悉数组与指针的关系,那么这里的argv[n]也容易理解, 他们都是字符串!

4,sscanf(argv[1],"%d",&led_no) !=1 这一句:sscanf不同于scanf的地方是 sscanf从一个字符串中得到输入, 而scanf是你从终端输入。 这句就是,如果argv [1]这个字符串中含数字,那么就把它读入led_on. 并返回1,否则返回0