5

我对 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。背后的事实是什么?

4

1 回答 1

5

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

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

于 2012-06-05T09:24:16.373 回答