Я работал над примером в книге K & R C, где он просит по существу построить калькулятор RPN, который вводит ввод через аргументы командной строки. Мое решение по существу повторяется с помощью приведенных аргументов и выплескивает ответ, но я заметил что-то:argv: Санитирование подстановочных знаков
Если бы я должен был дать символ умножения (звездочка) '*'
без одинарных кавычек, gcc предполагает, что это подстановочный знак, поэтому мой вход
$./rpn 5 10 *
дает мне выход
read 5
read 10
read rpn
read rpn.c
= 0
Обмотка звездочку одинарные кавычки средств этот вопрос
$./rpn 5 10 '*'
read 5
read 10
read *
= 50
Мой вопрос заключается в том, будет ли способ дезинфицировать входные данные, чтобы моя программа не требовала, чтобы звездочка была обернута в одинарные кавычки, или это поведение вызвано чем-то более фундаментальным (например, Linux/POSIX/UNIX двоичное исполнение и обработка аргументов)?
Чертовски хороший вопрос. – Qix
Все, что связано с оболочкой; ничего общего с компилятором C вообще. Чтобы продемонстрировать, попробуйте написать небольшую программу: '#include' и 'int main (void) {char * args [] = {" ./rpn "," 5 "," 10 "," * ", 0}; execv (args [0], args); return -1; } '. Оболочка обычно расширяет '*'; это позволяет избежать использования оболочки, поэтому расширение не происходит. –
GCC ничего не знает. Оболочка - это тот, который подает вход в вашу программу. –