Как узнать, проходит ли параметр с или без "". Например:Передача параметров в C с и без ""
$ ./a.out "Hello I am chain of characters with spaces" $ ./a.out Hello I am not a chain of characters with spaces
Как узнать, проходит ли параметр с или без "". Например:Передача параметров в C с и без ""
$ ./a.out "Hello I am chain of characters with spaces" $ ./a.out Hello I am not a chain of characters with spaces
Посмотрите на argc
(кол-аргументов). В первом случае это будет 2, во втором - намного выше. (2, потому что элемент 0 argv
будет a.out, элемент 1 будет кавычкой).
Кавычки разобраны и обрабатываются оболочкой 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
, чтобы узнать, сколько у вас аргументов, и посмотреть на каждый индивидуальный аргумент, чтобы увидеть, содержит ли он пробелы и обрабатывать их соответственно.
Только наилучший ответ, но не * окончательный * один. То есть вы знаете только, что должны быть кавычки вокруг аргумента ** iff ** вы находите по крайней мере одно место в нем. Вы не можете различить «a.out hello» от «a.out» привет ». – usr2564301
ОК, спасибо. Я попытаюсь найти для этого использование. –
Это зависит от платформы, поскольку платформа (в Linux, оболочка) отвечает за разбор текста. – unwind
Кавычки здесь действительно являются частью синтаксиса оболочки. Они интерпретируются оболочкой и обычно делятся до того, как предложение передается программе как аргумент. –
Я работаю над Mac. Вы знаете, проблема в том, что во время моего последнего экзамена у меня было упражнение, в котором я должен был делать основной, кто не будет принимать параметры без "". –