Uživatel:Jkl~cswikiversity/Studuji cpp/Standardní knihovny

#include <errno.h>
// blablabla
chyba = errno;
perror("nepodařilo se otevřít soubor - chyba "); // a je vymalováno, přilepí to popis chyby
fprintf(stderr, "nepodařilo se otevřít soubor: %s\n", strerror(chyba)); //takhle bych to asi nedělal
if (chyba >= 0 && chyba < sys_nerr)
   fprintf(stderr, "nepodařilo se otevřít soubor: %s\n",sys_errlist[chyba]); //to je moc dlouhý :-(

Je nutné kompilovat s cc -lm !!

  • modf - má rozdělit celou a desetinou část - nutno dostudovat
  • fabs(x) - abs(x) v double
  • fmod - zbytek po dělení dvou doublů
  • pow(x,y) x^y
  • log, log10, sqrt - klasika
time_t t;       //typ proměnné pro Unixový timestamp
t = time(NULL); // jak překvapivé, že ...
  • komplikovanější ukázka práce s datem je tady

pseudonáhodná čísla

editovat
#include <stdlib.h>
void srand(unsigned int seed); // odpovídá pascalskému "randomize"
int rand(void);                //  0 - RAND_MAX

Třídění

editovat
  • ve standardní knihovně je implementovaný quicksort a binární vyhledávání (nutné setříděné pole):
void qsort(void *base, size_t nmemb, size_t size, int (* compar)(const void *, const void *)); 
void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (* compar)(const void *, const void *));

locale.h

editovat
setlocale(LC_ALL, ""); // uvozovky nastaví default
int islapha(int c); /* Je znak písmeno? */
int isdigit(int c); /* Je znak číslice? */
int isalnum(int c); /* Je znak písmeno nebo číslice? */
int islower(int c); /* Je znak malé písmeno? */
int isupper(int c); /* Je znak velké písmeno? */
int isprint(int c); /* Je znak tisknutelný? */
int isspace(int c); /* Jde o "bílý" znak? (mezera, tab, ...) */

int tolower(int c); /* Velká písmena na malá, ostatní znaky nechat. */
int toupper(int c); /* Malá písmena na velká, ostatní znaky nechat. */

Přerušení běhu

editovat
void abort(void); // okamžitě spadne s SIGABRT
void exit(int status); // odpovídá return(int status)
int atexit(void (*function)(void)); // nastaví funkci, která se má zavolat po ukočení exitem - je to FILO !!
#include <assert.h>
int main(void) {
 int pole[10];
 int i;
  for (i = 0; i <= 10; i++) {
   assert(i < sizeof(pole) / sizeof(int)); // tady otestujeme, jestli nemá i divnou hodnotu
   pole[i] = 0;
 }
 return 0;
}

pokud nechceme, aby to házelo assert error, tak nastavím

gcc assert.c -o assert -DNDEBUG

[1], [2] [3] [4]