【问题标题】:sprintf_s problemsprintf_s 问题
【发布时间】:2009-09-09 08:39:15
【问题描述】:

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

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

而且每次我遇到异常。例外是缓冲区很小。 当我将函数中的第二个字段更改为 sizeof(cBuf) + 1.

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

【问题讨论】:

    标签: c++ c


    【解决方案1】:

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

    【讨论】:

    • 所以我需要将缓冲区的大小增加 1 ?
    • 是的。 1 正好是空终止符的大小。在我的代码中,我什至直接写了char cBuf[8+1],以强调我需要为这个额外的字符放置位置。
    • 我用过char[sizeof("00000000")]
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 所以我需要将缓冲区的大小增加 1 ?
      猜你喜欢
      • 2023-02-21
      • 2020-04-07
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2010-12-03
      相关资源
      最近更新 更多