我正在为类设计程序,其中一条指令是使用命令行输入。例如,当您运行main -n 5 3
时,它会将5
和3
作为参数。什么是-n
?
如何在带有代码块而不是linux机器的PC上测试? 我的程序将如何阅读这些内容? 我是否需要将我的文件命名为main,然后在main中有两个适当传递的参数?
答案 0 :(得分:4)
程序中的main
函数具有原型
int main (int argc, char ** argv);
其中argc
将包含传递的参数数量,argv
是指向char*
数组的指针,该数组包含作为以null结尾的字符串的参数。
通常argv[0]
包含您的程序名称,argv[1]
包含您的第一个参数,依此类推。在您使用参数-n 5 3
运行程序的情况下,您将拥有
argv[1] = "-n"
argv[2] = "5"
argv[3] = "3"
答案 1 :(得分:1)
a.exe -n 5 3
会产生argv
的以下内容:
argv[0]
= a.exe
argv[1]
= -n
argv[2]
= 5
argv[3]
= 3
argv[4]
= NULL
和argc
将是4
。
在linux上,unistd.h
中有一个getopt
函数可以帮助您检索n
选项并解析后面的参数。但是,如果你的程序只需要找到-n
并从后面的两个参数中读取值,你可以这样做:
int i, x = 0, y = 0;
for (i = 0; i < argc; i++) {
if (strcmp(argv[i], "-n") == 0 && i + 2 < argc) {
x = atoi(argv[i+1]);
y = atoi(argv[i+2]);
}
}
答案 2 :(得分:1)
正如其他人所指出的,参数是argv [...]。在现实世界中,许多人使用getopt之类的东西来解析参数,因为它非常强大且已经过测试。
答案 3 :(得分:1)
通常C使用argc和argv来允许您索引从命令行传递的参数。我有一段时间没有在PC上工作,但是当我做的时候代码与Unix一致。
#include <stdio.h>
int main (int argc, char *argv[]) {
printf("Total args count=%s\n", argc);
printf("Command=%s\n", argv[0]);
for (i=1; i< argc; i++) {
printf("\narg%d=%s", i, argv[i]);
}
printf("\n");
return 0;
}
这将返回
Total Args 4
Command main
1 = -n
2 = 5
3 = 3