2012-06-05 154 views
5

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

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

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

回答

5

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

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