Да, это безопасно.
itoa
будет просто перезаписать память и вставить нулевой ограничитель в конце. Именно этот нуль-терминатор, что делает его безопасным (при условии, конечно, что ваш массив достаточно велик)
Рассмотрим следующее:
int iInt = 12345;
char pBuf[10];
itoa(iInt, pBuf, 10);
На данный момент, pBuf
будет выглядеть, как это в памяти:
+---+---+---+---+---+----+-----------------------------+
| 1 | 2 | 3 | 4 | 5 | \0 | ... unintialised memory ... |
+---+---+---+---+---+----+-----------------------------+
Затем повторно использовать pBuf
:
int iInt2 = 5;
itoa(iInt2, pBuf, 10);
Теперь pBuf
будет выглядеть как-то эту память:
+---+----+---+---+---+----+-----------------------------+
| 5 | \0 | 3 | 4 | 5 | \0 | ... unintialised memory ... |
+---+----+---+---+---+----+-----------------------------+
^
|
+---- note the null terminator
Что вы испытали при этом? Я не могу обнаружить UB. –
Да, вы можете (memset не обязательно) –