这可能比我做的要简单得多,但是我在解析没有给出size参数的命令行参数时遇到了麻烦(即我要求 int main(char * argv [ ])而不是使用 int main(int argc,char * argv []))。我想这实际上是一个两部分问题,但我想知道(1)你能运行一个程序如下所示的命令行参数吗?:
testProgram arg1 arg2 arg3
其中arg1,arg2和arg3将被放入argv [],而(2)如果可以的话,如何循环遍历每个参数以便您可以在程序中使用它们?
我知道这似乎很随意,但我想更好地理解命令行参数的工作原理以及如何正确使用它们。
感谢您的帮助和见解。
答案 0 :(得分:3)
签名
int main(char* argv[])
我所知道的任何C ++编译器都不支持。现在很少有人认可。但仍然。
签名
int main( int argc, char* argv[])
是标准的,适用于纯ASCII参数。
当它们被编码为UTF-8时,它也适用于Unix-land中的一般Unicode参数。
无论如何,它告诉你参数的数量。
答案 1 :(得分:1)
argc
告诉你程序收到了多少参数。因此,argv[0]
指的是程序本身的名称,argv[1]
指向您在命令行上传递的第一个参数,argv[2]
指向下一个参数,依此类推,直至argv[argc-1]
,这是最后一个。接下来是argv[argc]
,这是一个空指针。
因此,当您运行程序时,您不必指定参数的数量 - 您只需传递任意数量的参数即可。然后,库中的一些代码会通过,将您传递给各个参数的内容拆分,并告诉程序找到多少代码。
IOW,当你跑步时:
testProgram arg1 arg2 arg3
您的计划将会收到:
argv[0] = testProgram
argv[1] = arg1
argv[2] = arg2
argv[3] = arg3
argv[4] = null pointer
argc = 4
注意:argv[0]
的确切内容可以变化 - 它可能正是您为调用命令键入的内容,或者它可能是命令的完整路径,或者它可能(特别是在古代系统)是一个空字符串。在大多数现代系统中,它通常包含类似文件名的内容。
答案 2 :(得分:0)
您可以忽略argc
参数并处理argv[]
元素,直到找到NULL
的元素,因为argv
数组被指定为具有哨兵元素NULL
。我不确定问题的最终目的是什么。
#include <stdio.h>
int main(int argc, char** argv)
{
while (*argv) {
puts(*argv);
++argv;
}
return 0;
}