sprintf_s问题

时间:2009-09-09 08:39:16

标签: c++ c

使用此功能我有一个有趣的问题。 我用它如下:

int nSeq = 1;
char cBuf[8];
int j = sprintf_s(cBuf, sizeof(cBuf), "%08d", nSeq);

每次我得到例外。例外是缓冲到小。 当我将函数中的第二个字段更改为sizeof(cBuf)+ 1。

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

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:2)

由于%08d,您的字符串将需要终止'\ 0'和8字节数据(00000001)。 所以你必须大小为9。

答案 2 :(得分:1)

所有sprintf函数都添加一个null来终止字符串。所以实际上你的字符串是9个字符长。 8个字节的文本和结束的零