У меня есть следующий фрагмент кода, и я думаю, что это может вызвать переполнение в функции readlink().Будет ли это причиной переполнения?
pid_t get_pid_from_proc_self()
{
char buffer[4];
pid_t pid;
readlink("/proc/self", buffer, sizeof(buffer));
sscanf(buffer, "%d",(int *)&pid);
return pid;
}
Поскольку PID составляет 4 байта в Linux, readlink()
копирует 32 бита из "/ Proc/я" в target[]
. Затем, по моему мнению, дополнительный байт следует использовать для '\0'
, что делает его 5 байтами.
Также, readlink()
автоматически вставляет '\0'
в конце, если строка или мне нужно назначить ее последнему байту?
Спасибо для комментариев, ребята! Было очень сложно принять один ответ. Поэтому я просто выбрал ответ пользователя, который первым заметил, что sscanf() будет переполняться. +1 для всех, хотя :) Мне приятно учиться чему-то новому. –