为什么没有在C中显示?

Nei*_*val 3 c format-specifiers

这是我在C中的代码片段:

      char *str = NULL;
      int len = -1;

      // Get length
      len = snprintf(NULL, 0, "[%d]", 2);

      // Allocate str
      str = (char *)malloc(len + 1);

      // Assign str
      snprintf(str, len, "[%d]", 2);

      assert(len == 3);

      // Display str
      puts(str);
Run Code Online (Sandbox Code Playgroud)

我希望这应该显示出来[2].而len这里是3.

但只运行此代码 [2

为什么会这样?

MBy*_*ByD 11

缓冲区的长度是len+1,但你只传递lensnprintf,试试这个:

snprintf(str, len + 1, "[%d]", 2);
Run Code Online (Sandbox Code Playgroud)

来自cplusplus.com:

如果生成的字符串长度超过n-1个字符,则剩余的字符将被丢弃并且不会被存储,但会计算该函数返回的值.

在内容之后自动附加终止空字符.