2015-09-17 1 views
0

Как узнать, проходит ли параметр с или без "". Например:Передача параметров в C с и без ""

 
$ ./a.out "Hello I am chain of characters with spaces" 
$ ./a.out Hello I am not a chain of characters with spaces 
+4

Это зависит от платформы, поскольку платформа (в Linux, оболочка) отвечает за разбор текста. – unwind

+2

Кавычки здесь действительно являются частью синтаксиса оболочки. Они интерпретируются оболочкой и обычно делятся до того, как предложение передается программе как аргумент. –

+0

Я работаю над Mac. Вы знаете, проблема в том, что во время моего последнего экзамена у меня было упражнение, в котором я должен был делать основной, кто не будет принимать параметры без "". –

ответ

1

Посмотрите на argc (кол-аргументов). В первом случае это будет 2, во втором - намного выше. (2, потому что элемент 0 argv будет a.out, элемент 1 будет кавычкой).

3

Кавычки разобраны и обрабатываются оболочкой Linux (в данном случае).

В первом случае, оболочка, по существу, как это сделать:

execl("./a.out","a.out","Hello I am chain of characters with spaces", NULL); 

В то время как во втором случае, оболочка делает это:

execl("./a.out","a.out","Hello", "I", "am", "chain", "of", "characters", "with", "spaces", NULL); 

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

+0

Только наилучший ответ, но не * окончательный * один. То есть вы знаете только, что должны быть кавычки вокруг аргумента ** iff ** вы находите по крайней мере одно место в нем. Вы не можете различить «a.out hello» от «a.out» привет ». – usr2564301

+0

ОК, спасибо. Я попытаюсь найти для этого использование. –