Biblioteki ANSI C
string.h
Deklaruje funkcje do manipulowa-
nia łańcuchami takie, jak strcmp i
strcpy.
Standard ANSI definiuje wszystkie aspekty C: j¸
ezyk, prepro-
time.h
Deklaruje typy danych i definiuje
cesor oraz bibliotek¸
e. Prototypy funkcji bibliotecznych, jak rów-funkcje do manipulowania czasem.
nież niezb¸
edne struktury danych oraz stałych preprocesora s¸
a
Definiuje typy clock t i time t oraz
zdefiniowane w standardowych zbiorach nagłówkowych. Poniż-
struktur¸
e danych tm
sza tabela zawiera zestawienie standardowych zbiorów nagłówkowych, wł¸
acznie z podsumowaniem ich zawartości.
Uwaga: Identyfikatory zewn¸
etrzne rozpoczynaj¸
ace si¸
e od znaku
podkreślenia s¸
a zarezerwowane na użytek biblioteki: to samo do-tyczy wszelkich innych identyfikatorów rozpoczynaj¸
acych si¸
e od
znaku podkreślenia i wielkiej litery lub dwóch znaków podkre-
ślenia.
Wejście i wyjście: nagłówek <stdio.h> STANDARDOWE ZBIORY NAGŁÓWKOWE W ANSI C
Zbiór nagłówkowy
Przeznaczenie
Operacje na plikach
assert.h
Definiuje makro assert. Używane
do diagnostyki programu.
ctype.h
Deklaruje funkcje do klasyfikacji i
FILE *fopen(const char *filename, const char *mode) konwersji znaków.
FILENAME_MAX maksimum znakow w nazwie pliku errno.h
Definiuje makrosy dla warunków
bł¸
edu, EDOM i ERANGE, oraz
FOPEN_MAX
plikow mozna jednoczesnie otworzyc
zmienna całkowit¸
a errno poprzez
któr¸
a funkcje biblioteczne zwra-
FILE *freopen(const char *filename,
caj¸
a kod bł¸
edu.
const char *mode, FILE *stream)
Zwykle uzywa sie do zmiany plikow zwiazanych float.h
Definiuje zakres wartości, które
ze strumieniami stdin, stdout, stderr
mog¸
a być zapami¸
etywane w typach
zmiennoprzecinkowych.
#include <stdio.h>
limits.h
Definiuje wartości ograniczaj¸
ace
int main(void)
dla wszystkich danych typu całko-
{
witego.
/* redirect standard output to a file */
if (freopen("OUTPUT.FIL", "w", stdout) locale.h
Deklaruje struktur¸
e lconv i funkcje
== NULL)
niezb¸
edne do przystosowania pro-
fprintf(stderr, "error redirecting stdout\n"); gramu w C do poszczególnych śro-dowisk lokalnych.
/* this output will go to a file */
printf("This will go into a file."); math.h
Deklaruje funkcje matematyczne
oraz makro HUGE VAL
/* close the standard output stream */
setjmp.h
Definiuje funkcje setjmp oraz lon-
fclose(stdout);
gjmp,
które mog¸
a przekazywać
kontrol¸
e z jednej funkcji do dru-
return 0;
giej bez opierania si¸
e na wywoła-
}
niach i powrotach z funkcji. Defi-
niuje również typ danych jmp buf
int fflush(FILE *stream)
używany przez setjmp i longjmp.
int fclose(FILE *stream)
signal.h
Definiuje
symbole
i
procedury
niezb¸
edne
dla
obsługi
zdarzeń
int remove(const char *filename)
wyj¸
atkowych.
int rename(const char *oldname, consat char *newname) stdarg.h
Definiuje makrosy, które umożli-
wiaj¸
a dost¸
ep do nienazwanych ar-
FILE *tmpfile(void)
gumentów w funkcji, która akcep-
tuje zmienn¸
a liczb¸
e argumentów.
char *tmpnam(char s[L_tmpnam])
stddef.h
Definiuje standardowe typy danych
TMP_MAX
co najwyzej tyle roznych nazw mozna
ptrdiff t, size t, wchar t, symbol
wygenerowac podczas dzialania
NULL oraz makro offsetof
jednego programu
stdio.h
Deklaruje
funkcje
i
typy
da-
int setvbuf(FILE *stream, char *buf,
nych niezb¸
edne do obsługi ope-
int mode, size_t size)
racji
we/wy.
Definiuje
ma-
mode - mozliwe 3 wartosci:
krosy takie jak BUFSIZ, EOF,
_IOFBUF
pelne buforowanie
NULL, SEEK CUR, SEEK END i
_IOLBUF
buforowanie wierszy pliku tekstowego
SEEK SET
_IONBUF
brak buforowania
stdlib.h
Deklaruje wiele funkcji użyteczno-
Jezeli buf rowny NULL, to przydzial domyslny.
ści takich, jak procedury konwer-
sji łańcuchów, generator liczb lo-
#include <stdio.h>
sowych, procedury alokacji pami¸
eci
int main(void)
i procedury kontroli procesów (ta-
{
kie, jak abort, exit i system).
FILE *input, *output;
int fscanf(FILE *stream, const char *format, ... ) input = fopen("file.in", "r+b"); int scanf(const char *format, ... )
output = fopen("file.out", "w"); int sscanf(char *s, const char *format, ... )
/* set up input stream for minimal disk access, using our own character buffer */
if (setvbuf(input, bufr, _IOFBF, 512) != 0) Funkcje realizuj¸
ace wejście i wyjście znakowe
printf("failed to set up buffer for input "
"file\n");
else
printf("buffer set up for input file\n"); int fgtec(FILE *stream)
/* set up output stream for line buffering using space that will be obtained through char *fgets(char *s, int n, FILE *stream) an indirect call to malloc */
if (setvbuf(output, NULL, _IOLBF, 132) != 0) int fputc(int c, FILE *stream)
printf("failed to set up buffer for output"
" file\n");
int fputs(const char *s, FILE *stream)
else
printf("buffer set up for output file\n"); int getc(FILE *stream)
/* perform file I/O here */
int getchar(void)
/* close files */
fclose(input);
char *gets(char *s)
fclose(output);
return 0;
int putc(int c, FILE *stream)
}
int putchar(int c)
void setbuf(FILE *stream, char *buf)
Jesli buf == NULL, to buforowanie zostanie int puts(const char *s)
wylaczone, w przeciwnym przypadku rownowazne int ungetc(int c, FILE * stream)
(void) setvbuf(stream,_IOFBUF, BUFSIZ)
#include <stdio.h>
Funkcje realizuj¸
ace bezpośrednie wejście i wyjście
/* BUFSIZ is defined in stdio.h */
char outbuf[BUFSIZ];
size_t fread(void *ptr, size_t size, size_t nobj, int main(void)
FILE *stream)
{
/* attach a buffer to the standard output stream */
#include <string.h>
setbuf(stdout, outbuf);
#include <stdio.h>
/* put some characters into the buffer */
int main(void)
puts("This is a test of buffered output.\n\n");
{
puts("This output will go into outbuf\n"); FILE *stream;
puts("and won’t appear until the buffer\n"); char msg[] = "this is a test"; puts("fills up or we flush the stream.\n"); char buf[20];
/* flush the output buffer */
if ((stream = fopen("DUMMY.FIL", "w+")) fflush(stdout);
== NULL)
{
return 0;
fprintf(stderr, "Cannot open output file.\n");
}
return 1;
}
Formatowane wyjście
/* write some data to the file */
fwrite(msg, strlen(msg)+1, 1, stream);
int fprintf(FILE *stream, const char *format, ... )
/* seek to the beginning of the file */
fseek(stream, SEEK_SET, 0);
int printf(const char *format, ... )
/* read the data and display it */
int sprintf(char *s, const char *format, ... ) fread(buf, strlen(msg)+1, 1, stream);
printf("%s\n", buf);
int vprintf(const char *format, va_list arg) fclose(stream);
int vfprintf(FILE *stream, const char *format, return 0;
va_list arg)
}
int vsprintf(char *s, const char *format, va_list arg) size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream)
#include <stdio.h>
Formatowane wejście
struct mystruct
{
int i;
Obsługa bł¸
edów
};
int main(void)
void clearerr(FILE *stream)
{
Kasuje znaczniki konca pliku i bledu.
FILE *stream;
struct mystruct s;
int feof(FILE *stream)
Zwraca wartosc rozna od 0 na koncu pliku.
if ((stream = fopen("TEST.$$$", "wb")) == NULL)
/* open file TEST.$$$ */
int ferror(FILE *stream)
{
Zwraca wartosc rozna od zera, gdy blad.
fprintf(stderr, "Cannot open output file.\n"); return 1;
void perror(const char *s)
}
Wypisuje komunikat zwiazany z numerem errno.
s.i = 0;
s.ch = ’A’;
fwrite(&s, sizeof(s), 1, stream);
Klasyfikowanie znaków: nagłówek
/* write struct s to file */
<ctype.h>
fclose(stream); /* close file */
return 0;
isalnum(c)
prawd¸
a jest albo isalpha(c) albo isdigit(c)
}
isalpha(c)
prawd¸
a jest isupper(c) albo islower(c)
iscntrl(c)
znak kontrolny
Funkcje wyznaczaj¸
ace pozycj¸
e w pliku
isdigit(c)
cyfra dziesi¸
etna
isgraph(c)
znak drukowalny za wyj¸
atkiem odst¸
epu
islower(c)
mała litera
int fseek(FILE *stream, long offset, int origin) Dla plikow binarnych:
isprint(c)
znak drukowalny ł¸
acznie z odst¸
epem
nowa pozycja w miejscu oddalonym o offset znakow od origin.
ispunct(c)
znak drukowalny za
wyj¸
atkiem
Wartosci
origin
odst¸
epu, liter i cyfr
SEEK_SET
poczatek pliku
SEEK_CUR
biezaca pozycja
isspace(c)
odst¸
ep, nowa strona, nowy wiersz,
SEEK_END koniec pliku
powót karetki, tabulator, pionowy
tabulator
Dla plikow tekstowych:
offset musi byc rowny zeru
isupper(c)
duża litera
lub wartosci zwroconej przez ftell
isxdigit(c)
cyfra szesnastkowa
(wowczas origin musi byc rowne SEEK_SET) Funkcja fseek zwraca wartosc niezerowa w Dwie dodatkowe funkcje służ¸
a do zmiany wielkości liter:
przypadku bledu.
long ftell(FILE *stream)
int tolower(int c)
zamienia c na mala litere
zwraca wartosc biezacej pozycji dla stream int toupper(int c)
zamienia c na duza litere
lub -1L w przypadku bledu.
void rewind(FILE *stream)
Operacje na tekstach: nagłówek
Wywolanie rewind jest rownowazne:
<string.h>
fseek(fp,0L,SEEK_SET);
clearerr(fp);
char *strcpy(char *s, const char *ct)
#include <stdio.h>
Kopiuje ct do s lacznie z ’\0’; zwraca s int main(void)
{
char *strncpy(char *s, const char *ct, size_t n) FILE *fp;
Kopiuje co najwyzej n znakow;
char *newname="test.txt", first; char *strcat(char *s, const char *ct)
fp = fopen(newname,"w+");
Dopisuje znaki z ct na koniec s; zwraca s fprintf(fp,"abcdefghijklmnopqrstuvwxyz"); rewind(fp);
int strcmp(const char *cs, const char *ct) fscanf(fp,"%c",&first);
Porownuje znaki.
printf("The first character is: %c\n",first); fclose(fp);
int strncmp(const char *cs, const char *ct, size_t n) remove(newname);
Porownuje co najwyzej n znakow.
return 0;
}
char *strchr(const char *cs, char c)
zwraca wskaznik do pierwszego wystapienia c w s int fgetpos(FILE *stream, fpos_t *ptr)
lub NULL, jesli znak nie wystepuje
int fsetpos(FILE *stream, const fpos_t *ptr) char *strrchr(const char *cs, char c)
ustawia biezaca pozycje w stream wedlug
zwraca wskaznik do ostatniego wystapienia c w s wartosci zapamietanej przez fgetpos w
miejscu wskazywanym przez ptr
size_t strspn(const char *cs, const char *ct) W przypadku bledu zwraca wartosc rozna od zwraca dlugosc przedrostka w tekscie cs
zera
skladajacego sie ze znakow wystepujacych w ct
sin(x)
sinus x
size_t strcspn(const char *cs, const char *ct) cos(x)
cosinus x
zwraca dlugosc przedrostka w tekscie cs sklada-tan(x)
tangens x
jacego sie ze znakow nie wystepujacych w ct asin(x)
sin−1(x) w przedziale [−π2, π2],
x ∈ [−1, 1]
char *strpbrk(const char *cs, const char *ct) acos(x)
cos−1(x) w przedziale [0, π], x ∈
zwraca wskaznik do pierwszego wystapienia w cs
[−1, 1]
jakiegos znaku z ct lub NULL, jesli takich nie ma atan(x)
tan−1(x) w przedziale [−π2, π2]
atan2(y,x)
tan−1(yx) w przedziale [−π, π]
char *strstr(const char *cs, const char *ct) sinh(x)
sinus hiperboliczny x
zwraca wskaznik do pierwszego wystapienia tekstu ct cosh(x)
cosinus hiperboliczny x
w cs lub NULL, jesli ct nie wystepuje w cs tanh(x)
tangens hiperboliczny x
exp(x)
funkcja wykładnicza ex
size_t strlen(const char *cs)
log(x)
logarytm naturalny: ln(x), x > 0
log10(x)
logarytm o podstawie 10: log10(x), x > 0
char *strerror(size_t n)
pow(x,y)
xy (bł¸
ad zakresu, gdy x = 0 i y ≤ 0
zwraca wskaznik do tekstu komunikatu
lub, gdy x < 0 i y nie jest całkowite
√
odpowiadajacego bledowi o numerze n
sqrt(x)
x, x ≥ 0
ceil(x)
najmniejsza liczba całkowita nie
char *strtok(char *s, const char *ct)
mniejsza niż x
wyszukuje w tekscie s ciagi znakow przedzielone floor(x)
najwi¸
eksza liczba całkowita nie
znakami z ct
wi¸
eksza niż x
fabs(x)
wartość bezwzgl¸
edna |x|
ldexp(x,n)
x · 2n
frexp(x, int *exp)
rozdziela x
na
znormalizowan¸
a
cz¸
eść
ułamkow¸
a
z
przedziału
[1/2, 1]
i
wykładnik
pot¸
egi
2;
funkcja zwraca cz¸
eść ułamkow¸
a, a
wykładnik pot¸
egi wstawia si¸
e do
*exp
modf(x, double *ip)
rozdziela x na cz¸
eść całkowit¸
a i
ułamkow¸
a, obie z tym samym zna-
Funkcje mem... służ¸
a do operowania na obiektach traktowa-
kiem, co x; cz¸
eść całkowit¸
a wsta-
nych jak tablice znakowe; z założenia maj¸
a one działać bardzo
wia si¸
e do *ip i zwraca cz¸
eść ułam-
sprawnie.
kow¸
a
mod(x,y)
zmiennopozycyjna reszta z dziele-
nia x/y, z tym samym znakiem co
x
void *memcpy(void *s, const void *ct, size_t n) Kopiuje n znakow z obiektu ct do s i zwraca s void *memmove(void *s, const void *ct, size_t n) Robi to samo, co memcpy, ale dziala rowniez dla obiektow zachodzacych na siebie
int memcmp(const void *cs, const void *ct, size_t n) porownuje poczatkowe n znakow w cp i cs; zwraca taka sama wartosc jak strcmnp.
void *memchr(const void *cs, char c, size_t n) zwraca wskaznik do pierwszego wystapienia c w s lub NULL, jesli nie wystepuje.
void *memset(void *s, char c, size_t n)
wstawia c do poczatkowych n znakow s; zwraca s Funkcje matematyczne: nagłówek <math.h> W poniższym zestawieniu:
x,y - typu double
n - typu int
Wszystkie funkcje zwracaj¸
a wartość typu double. Wartości
k¸
atów dla funkcji trygonometrycznych wyraża si¸
e w radianach.