Я бы просто добавил это как комментарий к ответу GMan, но пока они не объединили мою учетную запись, у меня не было представителя, чтобы сделать это. (И теперь ответ GMan, по-видимому, был удален, так что это имеет меньше смысла.)
Я думаю, что GMan имел в виду
unsigned bufferSize = strlen(PATH) + strlen(FILE) + 2; // "/" and null-terminator
чтобы получить длину этих констант, а не размер указателей, как указывает скользящий тулл. (Отредактировано: или, если sizeof (STRINGLITERAL) дает размер данных, включая завершающий ноль, то код GMan по-прежнему будет работать для строковых констант.)
Хотя, я думаю, что если вы знаете точные длины PATH и FILE (как bufferSize), вам не нужен snprintf (), просто sprintf () будет безопасным. Но использование snprintf () не причинит вреда, так как вам все равно нужен bufferSize для выделения.
Отредактировано: Или, у Эндрю Y может быть даже лучший подход (для строковых констант времени компиляции), если это применимо к вам.