在这里,我有一个程序,它接受参数(多么令人惊讶......)。我希望他有几个论点,如:
./myprogram -f filename.txt -x -o
所以我想要带有“ - ”的主args,并且这些arg将接受另一个arg,在本例中是一个文件名。
我有这个结构,非常简单:
int main(int argc, char *argv[])
{
printf("Program name: %s\n", argv[0]);
while ((argc > 1) && (argv[1][0] == '-'))
{
switch (argv[1][1])
{
case 'f':
printf("%s\n",&argv[1][3]);
break;
case 'd':
printf("%s\n",&argv[1][2]);
printf("%s\n",&argv[1][2]);
break;
default:
printf("Wrong Argument: %s\n", argv[1]);
usage();
}
++argv;
--argc;
}
return 0;
}
正如你所看到的,在-d的情况下,这会打印出参数之后的内容,没有空格;这是一个示例输出:
./myprogram -dfilename
Program name: myprogram
filename
filename
并使用-f参数
./myprogram -f filename
Program name: myprogram
ffilename
它打印第一个字母的两倍,我不明白为什么。 有人可以帮忙吗?
答案 0 :(得分:4)
argv
包含一个字符串数组。 Argv [0]包含程序名,argv [1]包含-f
,argv [2]包含filename
。如果您打印argv [1] [3],则从-f
的第三个字母开始打印字符串。没有这样的东西,所以行为是未定义的。
答案 1 :(得分:2)
尝试使用标准参数库,例如GNU getopt。
你的代码的问题是-f应该是打印argv [2] [0],而不是argv [1] [3]。它还需要检查argc是否> 2。