当我使用Java时,我需要输入诸如java -?
之类的命令,如果用户最后键入-?
,为什么应用程序知道此内容以回复输出?请告诉我c代码以识别-?
答案 0 :(得分:1)
它们作为参数传递给main():
#include <stdio.h>
int main(int argc, const char* argv[])
{
for (int i = 0; i < argc; i++) {
printf("Arg %i is %s\n", i, argv[i]);
}
}
编译后执行为
myProgram.exe arg1 stuff ?
它将输出
Arg 0 is myProgram.exe
Arg 1 is arg1
Arg 2 is stuff
Arg 3 is ?
答案 1 :(得分:1)
在C
中,您有main
签名的三个选项。第一个是不带任何参数int main(void)
的参数。注释中提到的第二个int main()
采用任意数量的参数,但未命名。但是,第三个参数有两个参数int main(int argc, char **argv)
,参数的名称并不重要,它们只是常用的。这两个参数用于向程序提供命令行参数。
您的程序始终隐式接收一个参数,即应用程序的名称(如果主机环境无法提供,则为\ 0)。这里有一个关于如何遍历参数的小例子:
#include <stdio.h>
int main(int argc, char **argv) {
for(int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
}
答案 2 :(得分:0)
在C中,main声明为:
int main(int argc, char** argv);
第一个参数是参数的数量,第二个参数是参数的数组,因此,例如,您可以这样做:
#include<string.h>
#include<stdio.h>
#define QUESTION_MARK "-?"
int main(int argc, char **argv){
if(argc > 1){
char *qsmark = argv[1];
if(strcmp(qsmark, QUESTION_MARK) == 0){
printf("argv[1] is -?\n");
}
}
return 0;
}
请记住,第一个argv是可执行文件的名称。 但是,请避免手工比较字符串,请使用标准库获取qsmark所指向的内容实际上是否等于“-?”
答案 3 :(得分:0)
如果可以使用getopt()
或其他类似的POSIX函数。那么这是一种方法:
#include <stdlib.h>
#include <stdio.h>
#include <getopt.h>
int main(int argc, char** argv)
{
int opt;
while ((opt = getopt(argc, argv, "h?")) != -1)
{
switch (opt)
{
case '?':
case 'h':
printf("Usage: bla bla\n");
break;
}
}
return EXIT_SUCCESS;
}
示例:
~ # /tmp/temp_test -?
Usage: bla bla
~ # /tmp/temp_test -y
/tmp/temp_test: invalid option -- 'y'
Usage: bla bla
~ #
更多信息,man page。