Ответ 1
В спецификации С++ 17 не to_chars
что to_chars
добавляет терминатор NUL:
Все функции с именем
to_chars
преобразуютvalue
в строку символов, последовательно заполняя диапазон [first
,last
], где [first
,last
] требуется, чтобы быть допустимым диапазоном. Если элементec
возвращаемого значения таков, что значение, преобразованное вbool
, являетсяfalse
, преобразование было успешным, а членptr
указателем одного конца в конец написанных символов. В противном случае членec
имеет значениеerrc::value_too_large
, членptr
имеет значениеlast
, а содержимое диапазона [first
,last
) не указано.
Ничего не говорится о терминаторе NUL в этом параграфе или в параграфах, которые конкретно определяют поведение отдельных перегрузок to_chars
. Поэтому он не записывает один.
Пример работает, если to_chars
не содержит более 9 символов. Поскольку str
инициализируется всеми символами NUL, все, что не записано на str
останется в виде символов NUL.
Чтобы добавить к этому, оригинальная статья P0067R0, в которой она была предложена, явно указывает, что функции to_chars
не должны NUL-завершать строки.