【问题标题】:Why does ] not displayed in C?为什么 ] 在 C 中不显示?
【发布时间】:2013-04-02 09:04:24
【问题描述】:

这是我在 C 中的代码 sn-p:

      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);

我希望这应该显示[2]len 这里是 3。

但是运行这段代码只显示[2

为什么会这样?

【问题讨论】:

标签: c format-specifiers


【解决方案1】:

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

snprintf(str, len + 1, "[%d]", 2);

来自cplusplus.com

如果结果字符串长于 n-1 个字符,则 剩余的字符将被丢弃且不存储,但会被计入 函数返回的值。

终止的空字符会自动附加到后面 内容。

【讨论】:

  • 是的。这个答案是正确的,将在 6 分钟后被接受。 “您可以在 6 分钟内接受答案”。
【解决方案2】:

函数 snprintf() 最多将 len 个字节(包括终止的空字节 ('\0'))写入 str。

len 等于 3(第一次调用),所以 snprintf 将只写入 3 个字符:'['、'2' 和 '\0'。

【讨论】:

    猜你喜欢
    • 2012-03-25
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2012-06-29
    • 2015-12-07
    相关资源
    最近更新 更多