2012-06-05 19 views
5

Jestem zdezorientowany z funkcją snprintf. Po pierwsze nie znalazłem funkcji snprintf w kompilatorze wersji turbo C pod stdio.h Po drugie w kompilatorze GNU snprintf zwraca -1, gdy rozmiar bufora jest mniejszy od sformatowanego łańcucha, chociaż powinien zwracać liczbę znaków zostały wydrukowane, jeśli rozmiar bufora był wystarczająco duży. Mam następujące źródło:zamieszanie snprintf

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

Ten kod powinien wypisać 8 zgodnie z wiedzą o snprintf do tej pory. ale powraca -1 w moim kompilatorze GNU. Jakie są fakty?

Odpowiedz

5

Wygląda na to, że używasz starej wersji glibc. Od strony man dla snprintf:

Implementacja glibc z snprintf funkcji() i vsnprintf() jest zgodny ze standardem C99, czyli zachowuje się jak opisano powyżej, od wersji glibc 2.1. Do czasu wydania glibc 2.0.6 zwracaliby -1, gdy dane wyjściowe byłyby obcięte.