Вступить в клуб →
лёгкаявопросЯзык C/C++ и работа с памятью

Функция возвращает указатель на локальный буфер

Функция формирует идентификатор устройства:

char *make_id(int n) {
    char buf[16];
    snprintf(buf, sizeof(buf), "dev-%d", n);
    return buf;
}

Вызывающий код печатает результат: иногда строка выглядит правильно, иногда — мусор, а после добавления любого вызова между make_id и печатью всё ломается стабильно. В чём причина?

  • Размер буфера в 16 байт слишком мал, поэтому snprintf обрезает строку и вызывающий код печатает обрезанный мусор
  • snprintf не дописывает завершающий нулевой байт, поэтому строку нужно закрывать вручную присваиванием buf[15] = 0
  • buf лежит в кадре стека функции; после возврата кадр переиспользуется, и указатель становится висячим
  • Ошибки нет: раз функция вернула указатель на массив, компилятор продлевает время жизни этого массива до конца выражения

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела