2013-05-04 3 views
1

Вчера я сделал простую программу на C++, которая использует аргументы, переданные через командную строку.Как обрабатывать аргументы командной строки?

E.G. myDrive:\myPath\myProgram.exe firstWord secondWord 

Программа прекрасно работать и делать то, что он должен, но есть немного любопытства у меня есть: я должен был написать argc --; прежде, чем я мог бы использовать это хорошо, в противном случае у меня есть сбой во время выполнения [Составитель не будет говорить!].

В частности, argc дает мне плохое время, когда я не даю ни одного слова в качестве аргумента в программу, когда я запустить его ...

Сейчас он работает, так что это не плохо, но я интересно, почему это происходит! [P.S. делая argc --; и печать, она дает 0 как значение]

EDIT: Здесь все istructions, которые используют argc

int main(int argc, char *argv[]) { 
    [...] 
    argc --; 
    if(argc > 0){ 
     if(firstArg.find_last_of(".txt") != string::npos){ 
      reading.open(argv[1], ios::binary); 
      [...] 
     } 
    } 
    if ((!(firstArg.find_last_of(".txt") != string::npos)) && argc > 0){ 
    [...] 
     for(int i = 1; i <= argc; i ++){ 
     [...] 
     toTranslate = argv[i][j]; 
     [...] 
     toTranslate = argv[i][j]; 
     } 
    } 
} 
+0

Можете ли вы показать код, который демонстрирует эту проблему? –

+0

Я уверен, что вы написали что-то вроде 'i <= argc'. Покажите нам код. – Nawaz

+0

Я редактирую ответ, дайте мне секунду! – ingroxd

ответ

5

Аргументы включают имя самой программы, а также, так argc всегда, по крайней мере 1.

Вот типичный цикл:

int main(int argc, char * argv[]) 
{ 
    for (int i = 0; i != argc; ++i) 
    { 
     std::cout << "Argument #" << i << ": " << argv[i] << "\n"; 
    } 
} 

В качестве альтернативы вы можете распечатать назад:

while (argc--) 
{ 
    std::cout << argv[argc] << "\n"; 
} 
+0

Yup, но ошибка прокрутки, даже если я пытаюсь напечатать argc с 'cout << argc', и он только сработает, если я сделаю это раньше, чем минус! – ingroxd

+0

@IngrossoD: Просто используйте 'i Nawaz

+0

@Nawaz: Он принимает краш перед циклом for! Я начал, как ты сказал! – ingroxd