Указатель resolve
указывает на NULL. Когда он передается в sprintf
, функция пытается разыменовать этот указатель. Это вызывает неопределенное поведение , которое в этом случае заставляет программу создавать sh.
Определить resolve
вместо массива, достаточного для хранения результирующей строки.
char resolve[1000];
sprintf(resolve, "%s,%s\n", HTTP_HEADER, ERR_404);
Кроме того, вы можете вызвать snprintf
с указателем NULL и размером 0. Это вернет количество символов, которое будет записано в строку. Затем вы можете выделить именно столько места (плюс 1 для нулевого завершающего байта) и снова вызвать snprintf
.
int len = snprintf(NULL, 0, "%s,%s\n", HTTP_HEADER, ERR_404);
char resolve[len+1];
snprintf(resolve, len, "%s,%s\n", HTTP_HEADER, ERR_404);