我正在为一个类设计一个程序,其中一条指令是使用命令行输入。例如,当您运行main -n 5 3
时,它将以5
和3
作为参数。什么是-n
?命令行输入作为参数
如何在带有代码块的PC而不是Linux机器上测试此功能?
我的程序如何读取这些内容?
我需要命名我的文件主,然后在主要有两个参数适当传入?
我正在为一个类设计一个程序,其中一条指令是使用命令行输入。例如,当您运行main -n 5 3
时,它将以5
和3
作为参数。什么是-n
?命令行输入作为参数
如何在带有代码块的PC而不是Linux机器上测试此功能?
我的程序如何读取这些内容?
我需要命名我的文件主,然后在主要有两个参数适当传入?
在你的程序你main
函数原型
int main (int argc, char ** argv);
凡argc
将包含的参数量过去了,argv
是一个指向char*
数组包含你的参数为空值终止字符串。
通常argv[0]
包含您的程序的名称,argv[1]
您的第一个参数,依此类推。在你的情况下,如果运行的参数程序-n 5 3
你将不得不在argv
以下内容
argv[1] = "-n"
argv[2] = "5"
argv[3] = "3"
这是有道理的,所以我可以访问数组来分配在我的程序中使用的整数。这是我可以在Windows上测试的东西吗? –
@PaulthePirate是的,但请记住它们是以字符串的形式出现的。你需要首先用'atoi'或类似的函数将它们转换为整数。试着打印你的参数:'int i; for(i = 0; i
@PaulthePirate试试这个:http://pastebin.com/Y8VAta1w – luiscubal
A.EXE -n 5 3
结果:
argv[0]
= a.exe
argv[1]
= -n
argv[2]
= 5
argv[3]
= 3
argv[4]
= NULL
argc
和将4
。
在Linux上,有一个在unistd.h
的getopt
功能,可以帮助您检索n
选项,并解析后面的参数。 Howevef如果你的程序只需要找到-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]);
}
}
我没有linux,所以我不能真正测试它,但我的文件需要在Linux上工作,所以我想在我移植到linux之前做尽可能多的测试。 –
@PaulthePirate:我已经更新了我的答案+添加了一些额外的信息:) – LihO
将int n = atoi(argv [1]); char * address = argv [2];工作?假设最后一次输入的字符串为 –
正如其他人所指出的那样,参数argv中[...]。在现实世界中,许多人使用类似getopt的东西来解析参数,因为它非常强大并且已经过测试。
通常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
'-n'是'的argv [1]','5'是'的argv [2]'和'3'是'的argv [3]' – luiscubal
我不明白什么-n应该代表我的程序中,那么我只需要两个参数,即5和3. –
你自己写了这个程序吗?如果是这样,那么你可以选择'-n'的意思,如果它接受。您可以随时打印错误消息并在发现意外参数时中止程序。 – luiscubal