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

Если я бегу: тест ./programC++ Как проверить, был ли приведен аргумент или нет?

Buff1 = тест

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

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

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

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

+0

Вот почему 'argc' существует (вроде, поскольку' argv' заканчивается пустой строкой). – chris

+1

Пожалуйста, не редактируйте вопрос, чтобы включить решение. Вы аннулируете ответы, и это никому не помогает. – ChrisF

ответ

1

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

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

+0

Спасибо! :) Сейчас работает. – user2369405

+0

@ user2369405 если этот ответ помог вам, примите его –

+0

Ahh спасибо, мне было интересно, как это сделать. – user2369405

1

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

2

Использование argc для зная, как проходят основные аргументы. Оболочка или обработчик процесса подает программу по крайней мере одному аргументу в целом, то есть самому программному имени и всегда является первым аргументом. Оказывается, что argc=1 atleast, а 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 или эквивалентную функцию.

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 Buff1 = тест» приведет к ARGC быть 4, с ARGV [0 ] является «test», argv [1] - «Buff1», argv [2] - «=», а argv [3] - «тест».

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