Ваш компилятор, очевидно, знает, что значение uint8_t
может давать от 1 до 3 цифр, но не то, что функции Hour
, Minute
и Second
могут возвращать только до двухзначных значений.
Если вы передали значение 255
в формате "%2d"
, вы получите 3 символа. Если все три аргумента равны 100 или больше, вы бы записали 12 байтов в массив назначения. Компилятор предупреждает вас об ошибке, которая теоретически может произойти, учитывая типы аргументов, но, вероятно, не может произойти, учитывая фактические передаваемые значения. (Я несколько впечатлен тем, что он смог выдать это предупреждение, и не удивлен, что он не знает о семантике этих функций.)
Перезагрузка, вероятно, не связана. Попробуйте проверить содержимое time
после вызова sprintf
. Я думаю, вы обнаружите, что проблема не возникает там, и предупреждение является ложным. Вы можете отключить предупреждение, задав char time[12];
, или просто проигнорировать предупреждение.
Эта диагностика производится gcc с опцией -Wformat-overflow=2
, , задокументированной здесь .