Как передать нулевой символ в аргументе командной строки в C? - PullRequest
13 голосов
/ 17 февраля 2010

Я все еще хотел бы знать, как передать нулевой символ в качестве аргумента командной строки, возможно, чтобы в качестве аргумента в форме аргумента можно было передать одну строку:

"в \ 0be \ 0 или \ 0not \ 0то \ 0be \ 0"

А потом разбери его. Однако программа будет обрабатывать эту строку как:

"к \\ 0be \\ \\ 0 или 0not \\ 0то \\ 0be \\ 0"

Как я могу обойти это? Есть ли способ?

Ответы [ 2 ]

17 голосов
/ 17 февраля 2010

Вы не можете.

Программа на C получает аргументы в виде строк с нулевым символом в конце. Такая строка не может содержать нулевой символ по определению.

Если вы хотите передать нулевой символ, вы должны несколько кодировать его с использованием некоторого синтаксиса, а ваша программа на C должна затем декодировать его, интерпретируя этот синтаксис.

6 голосов
/ 17 февраля 2010

Строки C заканчиваются нулем, поэтому передача строк, содержащих символы NUL, невозможна в C.: -P

Теперь, если вы просто хотели преобразовать \0 (в пользовательском вводе, т.е. "\\0" в виде строки C) в действительные NUL-символы, это другой вопрос. В этом случае вашей программе нужен только синтаксический анализатор для обработки \0 как разделителей.

...