我想知道这是否安全/批准使用:
char pBuf[10];
itoa(iInt, pBuf, 10);
// pBuf value gets copied elsewhere
//memset(pBuf, 0, sizeof(pBuf)); // Is this necessary?
itoa(iInt2, pBuf, 10);
// pBuf value gets copied elsewhere
我可以像这样重用缓冲区吗?
最佳答案
是的,这很安全。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