//Checks if a arguement was specified
if (argv[1] != "")
strcpy(Buff1, argv[1]);
else
strcpy(Buff1, "default");
Если я бегу:
./program test
Buff1 = тест
Если я бегу:
./program
Buff1 = ПАКЕТЫ / = пакеты
Как мне сделать, если ничего не указано, что Buff1 будет по умолчанию «по умолчанию»?
Заранее спасибо.
использование argc
определить количество аргументов. Он будет равен 1, если не было аргументов, и 2, если был указан один аргумент.
Обратите внимание, что вы не можете сравнивать строки C, используя ==
оператор. Это сравнение указателей.
использование 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
или эквивалентная функция.
argc
Выдает количество аргументов, переданных программе.
Имейте в виду, что argc
не может быть меньше 1 с argv[0]
всегда имя программы, поэтому, если не было передано ни одного аргумента, вы должны использовать это if(argc == 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.