在这里,我有一个程序,它接受参数(多么令人惊讶......)。我希望他有几个论据,例如:
./myprogram -f filename.txt -x -o
所以我想要带有“-”的主参数,并且这些参数应接受其他参数,在示例中是文件名。
我有这个结构,非常简单:
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
它打印了第一个字母两次,我不明白为什么。 有人可以帮忙吗?
最佳答案
argv
包含一个字符串数组。 argv[0] 包含程序名称,argv[1] 包含 -f
(在您的情况下),argv[2] 包含 文件名
。如果打印 argv[1][3],则打印从 -f
的第三个字母开始的字符串。不存在这样的事情,因此行为未定义。
关于命令行参数 : use of space between program argument, 和参数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178181/