C++ 斯普林特夫问题

C++ 斯普林特夫问题,c++,c,C++,C,我在使用这个函数时遇到了一个有趣的问题。 我使用它如下: int nSeq = 1; char cBuf[8]; int j = sprintf_s(cBuf, sizeof(cBuf), "%08d", nSeq); 每次我都有例外。例外情况是缓冲区太小。 当我将函数中的第二个字段更改为sizeof(cBuf)+1时 如果我只想复制8个字节,而我有一个包含8个字节的数组,为什么我需要添加一个呢?您的缓冲区包含8个位置。您的字符串包含8个字符和一个空字符来关闭它。所有sprintf函数都会添加

我在使用这个函数时遇到了一个有趣的问题。 我使用它如下:

int nSeq = 1;
char cBuf[8];
int j = sprintf_s(cBuf, sizeof(cBuf), "%08d", nSeq);
每次我都有例外。例外情况是缓冲区太小。 当我将函数中的第二个字段更改为sizeof(cBuf)+1时


如果我只想复制8个字节,而我有一个包含8个字节的数组,为什么我需要添加一个呢?

您的缓冲区包含8个位置。您的字符串包含8个字符和一个空字符来关闭它。

所有sprintf函数都会添加一个空字符来终止字符串。所以实际上你的字符串是9个字符长。由于%08d,您的字符串将需要终止“\0”和8字节的数据(00000001)。
所以您必须将缓冲区的大小设置为9。

所以我需要将缓冲区的大小增加1?是的。1正好是空终止符的大小。在我的代码中,我甚至字面上写了
char cBuf[8+1]
来强调我需要为这个额外的字符放置位置。我使用了
char[sizeof(“00000000”)]
。所以我需要将缓冲区的大小增加1?