Что если в командной строке есть символ '\ 0'? - PullRequest
3 голосов
/ 03 июля 2011
int main(int argc,char* argv[]);

Если в A есть символ '\0', будет ли он разбит на 2 аргументов?

./programe "A"

Я не могу воспроизвести его легко, так как яне могу положить '\0' в A , но может быть кто-то, кто может.

1 Ответ

9 голосов
/ 03 июля 2011

Параметры передаются в программы как строки C; в частности, системный вызов execve() (самый низкий уровень, видимый для программ и обычно эфира, очень близкий или идентичный API ядра) использует строки C, поэтому невозможно передать \0 в параметре. Обратите внимание, что, хотя обычный способ, которым вектор параметров передается ядром в адресное пространство процесса, является смежным, так что встроенный \0 действительно разделит параметр, низкоуровневый интерфейс exec() использует список (char *) s, поэтому встроенный \0 просто завершит параметр рано.

...