2 наиболее важные вопросы с вами код:
- Вы ДОЛЖНЫ проверить количество аргументов ДО аргументов проверки.
- Строки сравниваются с использованием стандартных библиотечных функций, таких как
strcmp()
или даже лучше strncmp()
если вы знаете максимальную длину.
Адрес Код C, который работает. Надеюсь, эта помощь.
#include <stdio.h>
#include <string.h>
int main (int argc, char* argv[])
{
if ((argc > 1) && ((strcmp(argv[1], "a") == 0)))
{
printf("hello world, argc: %d\n", argc);
}
else if ((argc > 1) && (strcmp(argv[1], "2") == 0))
{
printf("hello everyone, argc: %d\n", argc);
}
for (int i = 0; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
Некоторые детали сравнения строк. Если вы используете оператор ==
(если вы его не перегрузили), вы просто сравниваете адреса объектов (смотрите внимательно, у вас есть char *
в обоих случаях). Очевидно, что ваш строковый литерал и буфер аргументов имеют разные адреса. Вам нужно сравнить содержимое. На самом деле в C++ вы можете построить std::string
и использовать оператор сравнения.
Так другое решение, более C++, что работает на основе ==
оператора:
#include <stdio.h>
#include <string>
int main (int argc, char* argv[])
{
if ((argc > 1) && (std::string(argv[1]) == "a"))
{
printf("hello world, argc: %d\n", argc);
}
else if ((argc > 1) && (std::string(argv[1]) == "2"))
{
printf("hello everyone, argc: %d\n", argc);
}
for (int i = 0; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
Вам нужно использовать 'strcmp' вместо' == ' –
@Andreas Очень быстро один :) – ha9u63ar
Поскольку это помечено C++,' (std :: string (argv [1]) == "a") ' может быть более уместным. – Roddy