2012-06-05 152 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。