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;

char bufr[512];

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;

char ch;

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.