argv — c ++ Как проверить, был ли приведен аргумент или нет?

//Checks if a arguement was specified
if (argv[1] != "")
strcpy(Buff1, argv[1]);
else
strcpy(Buff1, "default");

Если я бегу:
./program test

Buff1 = тест

Если я бегу:
./program

Buff1 = ПАКЕТЫ / = пакеты

Как мне сделать, если ничего не указано, что Buff1 будет по умолчанию «по умолчанию»?

Заранее спасибо.

1

Решение

использование argc определить количество аргументов. Он будет равен 1, если не было аргументов, и 2, если был указан один аргумент.

Обратите внимание, что вы не можете сравнивать строки C, используя == оператор. Это сравнение указателей.

1

Другие решения

использование argc для того, чтобы знать, как основные аргументы передаются. Оболочка или обработчик процесса передает программе, по крайней мере, один аргумент в целом, то есть само имя программы, и это всегда первый аргумент. Оказывается, что argc=1 по крайней мере, и argv[0] это имя программы.

  int main(int argc, char **argv){
// declarations and all here
if(argc<2){
strcpy(Buff1, "default");

}
else{
strcpy(Buff1, argv[1]);
}
return 0;
}

Без этого у вас есть две проблемы. Когда вы используете argv[1], когда argc=1Вы действительно выходите за пределы. Поскольку, c++ не выполняет никаких проверок границ, иногда ваша программа может потерпеть неудачу в доступе к адресу памяти рядом с argv [0]. И еще одна проблема заключается в том, что вы пытаетесь сравнить строки с != оператор. Вы не можете сравнить строковые литералы сразу с ==/!= оператор. Вы должны использовать strcmp или эквивалентная функция.

2

argc Выдает количество аргументов, переданных программе.
Имейте в виду, что argc не может быть меньше 1 с argv[0] всегда имя программы, поэтому, если не было передано ни одного аргумента, вы должны использовать это if(argc == 1){}

1

Хорошо, если ничего не передано, argc будет равен 1 (argc дает количество переданных аргументов). Это означает, что единственным элементом argv, в котором есть что-либо, будет argv [0] (который содержит название программы). Это означает, что вызов argv [1] будет показателем вне диапазона, что может привести к сбою, или, если вам повезет, это просто ненужные данные.

if(argc == 1)
strcpy(Buff1, "default");

else if(argc == 2)
strcpy(Buff1, argv[1]);

else
//do something here if there is more than 1 argument passed to it

Также стоит отметить, что способ передачи аргументов примера не будет работать с тем, что вы намереваетесь: «./program test Buff1 = test» приведет к тому, что argc будет 4, а argv [0] будет «test», argv [1] — «Buff1», argv [2] — «=», а argv [3] — «тест».

Простой вызов «./program test helllooo» будет работать с предоставленным мною фрагментом программы, заполняя Buff1 «helllooo». И вызов «./program test» также будет работать, заполняя Buff1 значением «default». Чтобы сделать что-то более продвинутое, вам понадобятся переключатели командной строки (например, ./program test -b что-то здесь -x что-то здесь), что является просто более продвинутым способом парсинга argc и argv.

1