Я знаю, что уже есть некоторые другие вопросы и ответы об анализе аргументов командной строки в c, но я надеюсь, что кто-нибудь может сказать мне, почему мой код не работает. Вот мой код. Я хочу анализировать свои аргументы без внешних заголовков, таких как getopt.h /(unistd.h) или args.h.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void showUsage(char *prog) {
printf("Usage for %s...", prog);
}
int main(int argc, char *argv[]) {
if (argc == 1) {
showUsage(argv[0]);
return EXIT_FAILURE;
}
int c;
char *input, *output;
for (c = 0; c < argc; ++c) {
if (strcmp((char *)argv[c], "-i")) {
input = (char *)argv[c + 1];
}
if (strcmp((char *)argv[c], "-o")) {
output = (char *)argv[c + 1];
}
}
printf("\nInput %s Output: %s", input, output);
return EXIT_SUCCESS;
}
c = 1
, так какargv[0]
— это имя программы, а не аргумент. - person Barmar   schedule 28.08.2017argv[c]
в(char *)
, так как это уже его тип. - person Barmar   schedule 28.08.2017argv[0]
не является параметром командной строки. И если вы найдете опцию и используете опцию с параметром, вы должны продвинуться на 2 вместо 1. - person Gerhardh   schedule 28.08.2017strcmp
возвращает0
, когда строки равны. - person Weather Vane   schedule 28.08.2017if (argc < 3)
, такжеargv[c + 1]
является неопределенным поведением на последней итерации. - person Weather Vane   schedule 28.08.2017