У вас нет резервного хранилища для имени файла.Вы создали указатель, но не выделили место.Это означает, что он почти наверняка указывает куда-то, куда вы не хотите писать: -)
Предполагая, что вы знаете максимальный диапазон идентификатора процесса (скажем, 5 цифр, например), самое простое исправление - это что-то вроде (и немного изменив аргументы, поскольку /proc/
и /stat
являются фиксированными строками):
char pid_fname[sizeof("/proc/99999/stat")];
sprintf(pid_fname, "/proc/%d/stat", pid);
В противном случае вам потребуется динамически распределять достаточно места на основе фактического значения pid
и кодировать с защитойесли у вас не хватит памяти.
Поскольку системы обычно имеют фиксированный диапазон идентификаторов процессов, я бы выбрал буфер фиксированного размера.Если вы действительно хотите защитить от ошибок, не беспокоясь о динамическом размещении, вы можете использовать что-то вроде:
char pid_fname[sizeof("/proc/99999/stat")];
if ((pid < 0) || (pid > 99999)) {
fprintf (stderr, "WTH? What sort of PID was that (%d)?\n", pid);
exit (1);
}
sprintf(pid_fname, "/proc/%d/stat", pid);