Поэтому мне нужно написать программу, которая содержит два возможных варианта в зависимости от того, что выбирает пользователь, вводя либо -i, либо -w. Я новичок в аргументах командной строки в целом и понятия не имею, как это сделать. Пока у меня есть:
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc == -'i') {
puts("Test 1");
}
else if (argc == -'w') {
puts("Test 2");
}
return 0;
}
Он ничего не печатает ... Приветствуются любые объяснения. Я просто пытаюсь понять логику этого.





Вы должны проверить argv [i], где i - номер массива вводимого аргумента командной строки, argv [0] будет именем вызываемого файла, а после этого argv [1] будет первым оператором, argv [2 ] следующий и так далее
Прежде всего, вы сравниваете апельсины с апелляциями. argc хранит количество
аргументы. Во-вторых, даже если бы вы использовали argv[1], сравнение все равно было бы
неправильно, потому что это будет сравнение указателей, а не содержимого. Обратите внимание, что в C
строка - это последовательность символов, которая заканчивается байтом, завершающим '\0'.
Переменная char* указывает только на начало этой последовательности. Оператор ==
проверяет равенство значений, в случае указателей (и строковых литералов) он
сравнивает, указывают ли оба указателя на одно и то же место.
Когда вы хотите сравнить строки, вы должны сравнить сами строки,
это означает, что вам нужно сравнить содержимое, на которое указывают указатели.
Для строк вы должны использовать функцию strcmp следующим образом:
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "usage: %s option\n", argv[0]);
return 1;
}
if (strcmp(argv[1], "-i") == 0)
puts("Test 1");
else if (strcmp(argv[1], "-w") == 0)
puts("Test 2");
else {
fprintf(stderr, "Invalid option '%s'\n", argv[1]);
return 1;
}
return 0;
}
Обратите внимание, что сначала важно проверить, достаточно ли у вас командной строки
аргументы (первый if моего кода). Если пользователь не передал аргумент,
argc будет 1, а argv[1] будет указывать на NULL, что приведет к неопределенному
поведение, если оно передано в strcmp. Вот почему я делаю strcmp только тогда, когда
100% уверен, что argv[1] это не NULL.
Также, если вы пишете код для системы POSIX (Linux, Mac и т. д.), Я рекомендую использовать
getopt для анализа аргументов командной строки.
Кажется, что объяснение того, что количество аргументов командной строки задается количество аргументов (argc) с указателем на каждый аргумент (хранящимся как строка прекращенный), предоставленным в вектор аргумента (*argv[]), помогает концепции понять.
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("The name of the program is %s\n", argv[0]);
if ( strcmp(argv[1], "-i") == 0 ) { puts("Test 1"); }
if ( strcmp(argv[1], "-w") == 0 ) { puts("Test 2"); }
return 0;
}
Это не сработает, если не будут переданы аргументы, так как он будет вызывать strcmp с NULL.
Пожалуйста, отредактируйте этот вопрос, чтобы описать, что делает этот код, чтобы ответить на особенности вопроса. stackoverflow.com/help/how-to-answer
argc означает «количество аргументов». означает количество аргументов
argv - это двумерный массив. Строки - это одномерные массивы символов в C. Второе измерение исходит из того, что у вас есть несколько String.
Итак, если вам нужен первый аргумент String, вы должны получить к нему доступ следующим образом:
argv[0]
Вы также пытаетесь сравнить строки, длина которых превышает 1 символ. Вы должны использовать strcmp для сравнения строк в C. См. Как правильно сравнивать строки?
и если вы хотите сравнить равенство, вы не должны использовать ==, == предназначен для базовых типов данных, таких как int или char.
argc представляет количество параметров, которые были переданы в командной строке, включая само имя программы.
В c символ, например 'i', представляет собой 8-битное число, представляющее код ASCII буквы i. Итак, ваш условный оператор if (argc == -'i') на самом деле проверяет, является ли -105 (105 - это значение ascii буквы i) числом аргументов, переданных вашей программе.
Чтобы проверить, являются ли переданные аргументы "-i" или "-w", вам необходимо выполнить сравнение строк, используя функции библиотеки c или ваш собственный алгоритм, и вам необходимо сравнить эти строки с argv[i] (где i - позиция параметра, который вы проверка в вызове программы)
argc- это количество аргументов,argv- это вектор аргумента, где хранятся данные параметров. Вы смотрите на количество аргументов в своем фрагменте.