snprintf混乱

时间:2012-06-05 09:20:48

标签: c string printf

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

1 个答案:

答案 0 :(得分:5)

听起来你正在使用旧版本的glibc。来自snprintf的手册页:

  

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