C ++ - int main(int argc,char * argv [])

时间:2011-03-07 08:24:59

标签: c++ arrays main argv

如果我有这个:

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

在正文中,您有时可以使用argv[1]找到程序。

我们何时使用argv[1]而不是argv[0]?是否只是在我们只想在命令行中读取第二个参数时?

7 个答案:

答案 0 :(得分:12)

按惯例argv[0]当前程序的名称(或路径),argv[1]argv[argc - 1]是<用户提供的strong>命令行参数。

但是,这并不 为真 - 程序可以通过OS特定的功能来绕过这个要求,这种情况经常发生,你应该知道它。 (我不确定即使你知道它也能做很多事情,但是......)

示例:

gcc -O3 -o temp.o "My file.c"

会(应该)产生以下参数:

argc: 5
argv: ["gcc", "-O3", "-o", "temp.o", "My file.c"]

所以说argv[0]会将gcc而不是引用到-O3

答案 1 :(得分:5)

argv是一个指针数组,此数组中的每个指针都存储一个来自命令行的参数。所以argv[0]是第一个参数(即可执行文件/程序本身),argv[1]是第二个参数,依此类推!

参数总数由argc确定。

答案 2 :(得分:3)

假设您的 C ++ 可执行文件是:

/home/user/program(或Windows中的C:\program.exe

如果执行:

./home/user/program 1 2(或Windows中的C:\program.exe 1 2

argv[0] = /home/user/programC:\program.exe
argv[1] = 1
argv[2] = 2

那是因为:

  • argv[0]是可执行文件的路径
  • argv[1]是第一个参数

修改

现在我看到argv[0]不一定是可执行文件的路径 阅读以下SO问题:Is args[0] guaranteed to be the path of execution?

答案 3 :(得分:2)

argv [0]是程序的执行路径,argv [1]是程序的第一个参数

答案 4 :(得分:0)

是的,主要是它,argv[1]是第二个命令行参数。第一个命令行参数是程序本身的名称。

或者,为了避免此答案最初具有的语义混乱以及其他人的评论,将argv [0]称为第0个参数可能是有意义的,因此argv[1]现在将是用户提供的值的“第一”。

无论如何,这来自exec()系列功能,例如execl有用法:

 int execl(const char *path, const char *arg0, ... /*, (char *)0 */);

在(Unix)shell中键入命令时,如果需要,shell首先解析命令名(使用$PATH)以查找实际的绝对路径。 ({1}}提供(绝对或相对)路径,最初输入的命令以path提供,最终成为程序中的arg0

剩余的命令行参数最后以argv[0]等结尾。

答案 5 :(得分:0)

简短答案是肯定的,数组包含传递给程序的所有选项。

答案 6 :(得分:0)

as argv [0]是程序本身的文件路径。 额外的命令行参数在其他索引中,argv [1],argv [2] .. 你可以在这里阅读更多 : http://www.site.uottawa.ca/~lucia/courses/2131-05/labs/Lab3/CommandLineArguments.html