DODATEK B BIBLIOTEKA STANDARDOWA
cznej tablicy. Wywołanie tmpnam(s) wstawia tę nazwę do argumentu s i zwraca
wartość s. W tablicy s musi być miejsce przynajmniej dla I__tmpnam znaków.
Funkcja tmpnam przy każdym wywołaniu tworzy inną nazwę; gwarantuje się co najwyżej TMP_MAX różnych nazw podczas wykonywania programu. Zwróć uwagę na to, że funkcja tworzy nazwę, a nie plik.
int setvbuf(FILE 1stream, char 1buf, int modę, size_t size)
Funkcja setvbuf kontroluje buforowanie danych strumienia; musi być wywołana przed czytaniem, pisaniem lub jakąkolwiek inną operacją. Wartość _IOFBF argumentu modę oznacza pełne buforowanie, _IOLBF - buforowanie wierszy pliku tekstowego, a _IONBF - brak buforowania. Jeśli argument buf jest różny od NULL, to buforem będzie wskazany obszar; w przeciwnym przypadku bufor zostanie przydzielony. Argument size określa rozmiar bufora. W przypadku błędu funkcja setvbuf zwraca wartość różną od zera.
void setbuf (FILE 1stream, char 1buf)
Jeśli argument buf jest równy NULL, to buforowanie strumienia stream zostanie wyłączone. W przeciwnym przypadku setbuf jest równoważne (void)setvbuf(stream, buf, _IOFBF, BUFSIZ).
Funkcje z rodziny printf realizują formatowane przekształcanie danych wyjściowych.
int fprintf(FILE 1stream, const char 1format, ...)
Funkcja fprintf, pod kontrolą argumentu format, przekształca i wypisuje pozostałe argumenty do strumienia wyjściowego stream. Wartość zwracana przez funkcję równa się liczbie wypisanych znaków lub jest liczbą ujemną w przypadku błędu.
Format zawiera znaki dwojakiego rodzaju: zwykłe znaki, które są bezpośrednio kopiowane do strumienia, i specyfikacje przekształcenia, które wskazują sposób przekształcenia i wypisania kolejnych argumentów funkcji. Specyfikacja przekształcenia rozpoczyna się znakiem % i kończy znakiem przekształcenia. Między % i znakiem przekształcenia mogą wystąpić (w podanej kolejności):
B1 WEJŚCIE I WYJŚCIE: NAGŁÓWEK <STDIO.H>
O dla przekształceń liczbowych: uzupełnienie liczby wiodącymi rozmiaru pola;
# alternatywna postać wyniku: dla formatu O pierwszą wypisaną cyfrą będzie 0; dla formatu x lub X wynik różny od zera poprzedza się 0x lub 0X; dla formatów e, E, f, g i G wypisana liczba zawsze będzie miała kropkę dziesiętną (dla g i G nieznaczące zera nie zostaną usunięte).
• Liczba określająca minimalny rozmiar pola. Przekształcony argument zostanie wypisany w polu o rozmiarze nie mniejszym od wskazanego (jeśli to konieczne - o większym). Jeśli przekształcony argument jest krótszy od rozmiaru pola, to zostanie dopełniony z lewej strony (lub z prawej, jeśli zlecono dosunięcie w lewo) do pełnego rozmiaru pola. Znakiem wypełniającym jest zwykle odstęp, chyba że polecono dopełnianie zerami - wówczas jest nim znak 0.
• Kropka oddzielająca rozmiar pola od precyzji.
• Liczba (precyzja) określająca: maksymalną liczbę wypisywanych znaków tekstu; liczbę cyfr wypisywanych po kropce dziesiętnej w specyfikacjach e, E lub f; liczbę cyfr znaczących w specyfikacjach g lub G; minimalną liczbę cyfr wypisywanych dla argumentu całkowitego (żądany rozmiar pola osiąga się przez dopisanie wiodących zer).
• Modyfikator długości h, I (litera I) lub L. Litera h wskazuje, że odpowiedni argument jest typu short lub unsigned short; litera I wskazuje, że argument jest typu long lub unsigned long; litera L wskazuje, że argument jest typu long double.
Zamiast liczby określającej rozmiar pola lub precyzję (lub obie) można podać znak *. W tym przypadku żądaną wartość oblicza się na podstawie następnego argumentu (lub następnych argumentów) funkcji. Argument ten musi mieć typ int.
Znaki przekształcenia i ich znaczenie podano w tabl. B-l. Jeśli znak następujący po znaku % nie jest znakiem przekształcenia, to skutek takiej specyfikacji nie jest zdefiniowany.
int printf(const char *format, ...)
Wywołanie printf(...) jest równoważne z wywołaniem fprintf(stdout,...). int sprintf(char *s, const char *format,...)
Funkcja sprintf działa tak samo, jak printf, przy czym wynik (zakończony znakiem ’\0’) jest zapisywany do tablicy s; tablica s musi być dostatecznie duża, żeby pomieścić wynik. Zwracana przez funkcję wartość (liczba wypisanych znaków) nie uwzględnia znaku ’\0\
325
Modyfikatory (w dowolnej kolejności), które wpływają na postać wyniku:
- dosunięcie przekształconego argumentu do lewego krańca jego pola;
+ wypisanie liczby zawsze ze znakiem;
odstęp poprzedzenie wyniku znakiem odstępu, jeśli jego pierwszym znakiem nie jest plus lub minus;