我想知道这是否安全/批准使用:

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

08-24 19:23