【发布时间】:2017-03-07 15:39:31
【问题描述】:
所以我对 argv 数组中的 C 中的标志和参数有疑问。
当我通过终端输入命令时:
示例:./main a b c -a
它不承认 -a 最后但如果我把它放在所有参数的开头,例如:./main -a a b c
它会检测到它。
我尝试将其与 if 进行交换,因此它将位于所有参数的前面,但在交换后它不会继续。就像忽略它之后的 for 循环一样。所以它只是交换它然后结束这个案子。如果有人知道我在这里缺少什么,我会很高兴。
代码:
while ( (c = getopt(argc, argv, ":ahd:")) != -1) {
switch (c) {
case 'a':
if(strcmp(argv[argc-1], "-a") == 0){
swap(&argv[argc-1], &argv[1]);
}
for(i = optind; i < argc; i++){
for(j = optind; j < argc - 1; j++){
if(strcmp(argv[j], argv[j + 1]) > 0){
swap(&argv[j], &argv[j + 1]);
}
}
}
for(z = optind; z < argc; z++){
printf("%s\n", argv[z]);
}
printf("%s\n", argv[1]);
break;
【问题讨论】:
-
您在问题中遗漏了您的代码,因此我们可以看到您做错了什么? :)
-
当您说“它无法识别...”时,您所指的“它”是什么?
-
问题不在于程序参数是否出现在
argv数组中——它们都出现了,按照它们在命令行中出现的顺序——而是你的程序对它们做了什么。当您没有提供任何程序时,我们无法谈论您的程序所做的事情。如果您需要代码方面的帮助,我们通常会收到 minimal reproducible example 来证明您的问题。