【问题标题】:snprintf confusionsnprintf 混乱
【发布时间】:2012-06-05 09:20:48
【问题描述】:

我对 snprintf 函数感到困惑。 首先我没有在stdio.h下的turbo C版本编译器中找到函数snprintf 其次,在 GNU 编译器中,当缓冲区大小小于格式化字符串时,snprintf 返回 -1,尽管如果缓冲区大小足够大,它应该返回已打印的字符数。我有以下来源:

#include<stdio.h>
int main()
{
  char str[100];
  int numchar = snprintf(str,2,"ello jdj");
  printf("%d\n",numchar);
  return 0;
}

根据我目前对 snprintf 的了解,此代码应输出 8。但它在我的 GNU 编译器中返回 -1。背后的真相是什么?

【问题讨论】:

    标签: c string printf


    【解决方案1】:

    听起来您使用的是旧版本的 glibc。来自snprintf 的手册页:

    函数 snprintf() 和 vsnprintf() 的 glibc 实现符合 C99 标准,也就是说,从 glibc 版本 2.1 开始,其行为如上所述。在 glibc 2.0.6 之前,当输出被截断时,它们将返回 -1。

    【讨论】:

      猜你喜欢
      • 2012-02-06
      • 2010-12-04
      • 2011-05-05
      • 2018-05-30
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多