snprintf混乱

ami*_*n__ 5 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;
}
Run Code Online (Sandbox Code Playgroud)

根据我所知的snprintf到目前为止,此代码应该输出8.但它在我的GNU编译器中返回-1.背后有什么事实?

CB *_*ley 5

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

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