2015-06-13 2 views
-1

У меня возникла странная проблема синтаксического анализа аргументов C++ с argv[]. Ниже приведен пример кода:C++ argv [1] что-то странное

int main(int argc, char **argv) { 
    for (int i=0; i <argc; i++) 
     printf("argv[%d] = %s|\n", i, argv[i]); 
    return 0; 
}; 

Когда я запускаю эту программу так:

./myprogram --aaa-a --bbb-b --ccc-c 

результат я получаю как:

argv[0] = myprogram| 
argv[1] = --aaa-a --bbb-b| 
argv[2] = --ccc-c 

, но когда я пытаюсь:

./myprogram --aaa-a --bbb-b --ccc-c 

дополнительное пространство между aa a nd bb, я получил:

argv[0] = myprogram| 
argv[1] = --aaa-a| 
argv[2] = --bbb-b| 
argv[3] = --ccc-c| 

Может ли кто-нибудь дать мне понять, что здесь происходит?

+0

Какую оболочку вы используете? –

+0

@zenith: да, вы правы. @ Мэтт Макнабб: стандартный тишина Debian. также я удалил флаг -O2 и теперь он работает как ожидалось. –

+2

Не воспроизводимый (http://coliru.stacked-crooked.com/a/852e8bf3919cfd2f). Вам нужно будет предоставить более точную информацию (среда, компилятор, компиляции и т. Д.). –

ответ

2

По какой-то причине у вас есть non-breakable space (или любой символ, который отображается как пробел) между --aaa-a и --bbb-b. Удалите всю командную строку и запишите ее с нуля.

+1

Кроме того, если это проблема, то к OP: пожалуйста, скопируйте и вставьте. Не просто повторно введите код, ввод и вывод в свой вопрос. Если бы вы * скопировали и вставляли *, то нераскрывающееся пространство было бы частью вопроса, мы могли бы проверить, что это проблема. – hvd

Смежные вопросы