Standardfunktioner i C

Relevanta dokument
Tentamen i Programmering grundkurs och Programmering C

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. Programmering i språket C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Strängar. Strängar (forts.)

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Innehåll. Relationer mellan klasser Operatoröverlagring. Static-medlemmar. Const- och referensmedlemmar. Const medlemsfunktioner

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Övning från förra gången: readword

Innehåll. 1 Typer. 2 C-strängar. 3 union. 4 Bitoperationer. 5 Komma-operatorn. struct Foo; void print ( const Foo& f) } void print (int i)

Innehåll. Heltalstyper. Heltalstyper. Heltalstyper Storlekarna specificeras i <climits>

Pekare och arrayer. Indexering och avreferering

.c och.h filer. Programmeringsteknik 113

Programmeringsteknik med C och Matlab

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Innehåll. Rela+oner mellan klasser Operatoröverlagring. Sta+c- medlemmar. Const- och referensmedlemmar. Const medlemsfunk+oner. friend

Tecken & Strängar. Kapitel 7

Enkla datatyper minne

Filer och structer Del 2

Exempel. Rekursion. Iterativ motsvarighet. fakultet.c. fibonacci.c Fibonaccisekvensen definieras som följer ƒ 0 =0, ƒ 1 =1, ƒ i+1 =ƒ i +ƒ i-1, i=1,2,

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

Föreläsning 13. In- och utmatning

Pekare ( )

C konstruerades i början på sjuttiotalet av Dennis Ritchie vid Bell Laboratories.

Poster ( structar ) Postdeklarationer

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

Föreläsning 11. Strängar

Avancerad SSL-programmering II

Strömmar och strängar

Bitvisa operationer. Programmeringsteknik 195

Programmering av inbyggda system 2014/2015

Programbibliotek. Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek

En ström är en klass som representerar en bytesekvens med data. I C++ finns flera typer av strömmar, men de går alla al använda på samma säl.

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

En kort text om programmering i C.

Deklarera en struct som kan användas för att representera en rät linje

Kapitel 5. Strömmar. Utmatning

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Föreläsning 7 Strängar

Tentamen *:58/ID100V Programmering i C Exempel 3

TDIU01 - Programmering i C++, grundkurs

Programbibliotek. Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Abstrakta datastrukturer

Tentamen ges för: Tentamensdatum: Tid:

Introduktion C-programmering

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

#include <stdio.h> #include <string.h>

Funktioner och programstruktur. Föreläsning 5

Maskinorienterad programmering

Repetition C-programmering

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Innehåll. 1 Funktionsmallar. 2 Pekare och konstanter. 3 Typomvandlingar. struct Name { string s; //... };

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Innehåll. Pekare Exempel

Hantering av textsträngar och talsträngar. William Sandqvist

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x

SP:PROG3 HT12 Tenta

Del6 Strömmar Ämnesområden denna föreläsning:

för den som kan Java

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Objektorienterad Programmering (TDDC77)

Innehåll. Pekare Exempel

C++ Lektion Filhantering

Loopar och datatyper. Föreläsning 3

Exempel ( )

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13. Omtentamen i Programmering C, 5p, A1, D1, PA1, Fri,

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Programsystemkonstruktion med C++

Föreläsning 9. Repetition och exempelproblem

Loopar och datatyper. Föreläsning 3

Variabler använder man sig av för att under programkörningen spara data eller information i primärminnet. En variabel har typ, namn och värde.

En klass behöver både deklaration och definition. Daniel Aarno Globala funktioner och variabler är OK.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Föreläsning 10: In- och utmatning speciellt filhantering

int (*fp) (char, char*) //pekare till funktion som tar //argumenten (char, char*) och //returnerar int

Transkript:

Standardfunktioner i C Include-filer i standarden: (enligt C11 * ) <assert.h> <complex.h> <ctype.h> <errno.h> <fenv.h> <float.h> <inttypes.h> <iso646.h> <limits.h> <locale.h> <math.h> <setjmp.h> <signal.h> <stdalign.h> <stdarg.h> <stdatomic.h> <stdbool.h> <stddef.h> <stdint.h> <stdio.h> <stdlib.h> <string.h> <tgmath.h> <threads.h> <time.h> <uchar.h> <wchar.h> <wctype.h> <...> även i C99 <...> bara i C11 <...> frivilliga * Standarden C11 antogs 2011, sista utkast kan laddas ner gratis från http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1539.pdf 1

<assert.h> Debug-hjälpmedel Ex. #define NDEBUG #include <assert.h>... assert(expression); Assertion failed: expression, function abc, file xyz, line nnn. 2

<ctype.h> Funktioner för att testa och ändra enskilda tecken. int isalpha(int c); // bokstav? int isdigit(int c); // siffra? int isxdigit(int c); // hexadecimal siffra? int isalnum(int c); // bokstav eller siffra? int isprint(int c); // skrivbart tecken? int isspace(int c); // "vitt" tecken? int isupper(int c); // stor bokstav? int islower(int c); // liten bokstav? int iscntrl(int c); // styrtecken? int isgraph(int c); // skrivbart? (ej ) int isprint(int c); // skrivbart? (även ) int tolower(int c); int toupper(int c); // stor bokstav -> liten // liten bokstav -> stor 3

<float.h> Makron som anger gränser för floating point-typer. Ex. FLT_DECIMAL_DIG, DBL_DECIMAL_DIG, FLT_MIN_10_EXP, DBL_MIN_10_EXP, FLT_MAX_10_EXP, DBL_MAX_10_EXP <limits.h> Makron som anger gränser för heltalstyper. Ex. SHRT_MIN, SHRT_MAX, INT_MIN, UINT_MAX, LONG_MIN, LONG_MAX, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, CHAR_MIN, CHAR_MAX 4

<iso646.h> Makron för alternativ syntax: and && and_eq &= bitand & bitor compl ~ not! not_eq!= or or_eq = xor ^ xor_eq ^= 5

<math.h> Parametrar och resultat av typen double: acos asin atan cos sin tan cosh sinh round tanh exp log log10 sqrt ceil floor fabs trunc pow(x,y) fmod(x,y) fmax(x,y) fmin(x,y) atan2(x,y) // arctan y/x Parametrar och resultat av typen float: acosf asinf atanf etc. Parametrar och resultat av typen long double: acosl asinl atanl etc. Funktioner som ger heltalsresultat: lround lroundf lroundl // ger long int llround llroundf llroundl // ger long long int 6

<stdarg.h> Macron för funktioner med variabelt antal parametrar void va_start(va_list ap, parmn); type va_arg(va_list ap, type); void va_end(va_list ap); // parmn är sista namngivna param // ger nästa parameter, typ: type // avslutar #include <stdarg.h> #define MAXARGS 31 void f1(int n_ptrs,...) { va_list ap; char *array[maxargs]; if (n_ptrs > MAXARGS) n_ptrs = MAXARGS; va_start(ap, n_ptrs); while (ptr_no < n_ptrs) array[ptr_no++] = va_arg(ap, char *); va_end(ap); f2(n_ptrs, array); 7

<stdbool.h> Macron: bool _Bool true 1 false 0 bool_true_false_are_defined 1 8

<stddef.h> Typer: size_t wchar_t ptrdiff_t max_align_t Macron: NULL offsetof(type, member-designator) 9

<stdio.h> Typer: FILE fpos_t Macron, bl.a: EOF FOPEN_MAX FILENAME_MAX SEEK_CUR SEEK_END SEEK_SET Fördefinierade strömmar : stderr stdin stdout 10

Filer /* Exempel på öppning av filer */ FILE *infil, *utfil, *trans, *mfil; infil = fopen("kontoplan", "r"); utfil = fopen("rapport", "w"); // endast läsning // för skrivning, skapa filen // om den inte finns redan, annars // töm filen på tidigare innehåll trans = fopen("transaktion", "a+"); // för tillägg till slutet // men även för läsning mfil = fopen("mätdata", "r+b"); Andra funktioner för hantering av filer; int fclose(file *stream); int fflush(file *stream); FILE *tmpfile(void); int remove(const char *filname); int rename(const char *old, const char *new); // läsning/skrivning av en // existerande binärdatafil 11

Enkla funktioner för läsning och skrivning Motsvarande funktioner finns i <wchar.h> för wide characters, t.ex. putwc, gettwc int fputc(int c, FILE *stream); int putc(int c, FILE *stream); int putchar(int c); int fgetc(file *stream); int getc(file *stream); int getchar(void); int ungetc(int c, FILE *stream); int fputs(const char *s, FILE *stream); int puts(const char *s); char *fgets(char *s, int n, FILE *stream); 12

/* läs fil, kryptera och skriv på två utfiler */ int main() { FILE *in, *ut, *logg; char rad[500]; if ((in = fopen("klartext.txt", "r")) == NULL) { fputs("kan ej öppna infilen\n", stderr); exit(99); if ((ut = fopen("hemlig.txt", "w")) == NULL) { fputs("kan ej öppna utfilen\n", stderr); exit(99); if ((logg = fopen("loggfil.log", "a")) == NULL) { fputs("kan ej öppna loggfilen\n", stderr); exit(99); while (fgets(rad, 500, in)!= NULL) { koda(rad); if (fputs(rad, ut) == EOF) { fputs("skrivfel på utfilen\n", stderr); if (fputs(rad, logg) == EOF) { fputs("skrivfel på loggfilen\n", stderr); 13

Formaterad in- och utmatning int fprintf(file * restrict stream, const char * restrict format,...); int fscanf (FILE * restrict stream, const char * restrict format,...); int printf(const char * restrict format,...); int scanf (const char * restrict format,...); int sprintf(char * restrict s, const char * restrict format,...); int snprintf(char * restrict s, size_t n, const char * restrict format,...); int sscanf(const char * restrict s, const char * restrict format,...); 14

Direktaccess long int ftell(file *stream); int fseek(file *stream, long int offset, int whence); void rewind(file *stream); size_t fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict stream); size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb, FILE * restrict stream); 15

#include <stdio.h> /* byt plats på två poster i en fil */ struct vpost { long varunr; int antal; ; int main() { struct vpost v1,v2; FILE *lfil; lfil = fopen("lagerfil", "rb+"); fseek(lfil, 58 * sizeof(struct vpost), SEEK_SET); fread(&v1, sizeof(struct vpost), 1, lfil); fread(&v2, sizeof(struct vpost), 1, lfil); fseek(lfil, -2 * sizeof(struct vpost), SEEK_CUR); fwrite(&v2, sizeof(struct vpost), 1, lfil); fwrite(&v1, sizeof(struct vpost), 1, lfil); 16

Felhantering errno // sätts automatiskt vid ev. fel void clearerr(file *stream); // nollställer int ferror(file *stream); // testar om något fel inträffat int feof(file *stream); // testar om end of file inträffat void perror(const char *s); // skriver ut s + lämplig felutskrift 17

<stdlib.h> double atof(const char *nptr); int atoi(const char *nptr); long int atol(const char *nptr); long long int atoll(const char *nptr); double strtod(const char * restrict nptr, char ** restrict endptr); float strtof(const char * restrict nptr, char ** restrict endptr); long double strtold(const char * restrict nptr,char ** restrict endptr); long int strtol(const char * restrict nptr, char ** restrict endptr, int base); long long int strtoll(const char * restrict nptr, char ** restrict endptr, int base); unsigned long int strtoul(const char * restrict nptr, char ** restrict endptr, int base); unsigned long long int strtoull(const char * restrict nptr, char ** restrict endptr, int base); 18

RAND_MAX int rand(void); void srand(unsigned int seed); Ex. Implementering static unsigned long int next = 1; int rand(void) // RAND_MAX assumed to be 32767 { next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768; void srand(unsigned int seed) { next = seed; 19

void *malloc(size_t size); void *calloc(size_t nmemb, size_t size); void *realloc(void *ptr, size_t size); void *aligned_alloc(size_t alignment, size_t size); // ny i C11 void free(void *ptr); EXIT_FAILURE EXIT_SUCCESS void exit(int status); char *getenv(const char *name); int system(const char *string); void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 20

Multibyte (UTF-8) int mblen(const char *s, size_t n); // n==antal bytes i s int mbtowc(wchar_t * restrict pwc, const char * restrict s, size_t n); int wctomb(char *s, wchar_t wc); // översätter wc till en multibyte size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n); // *s -> *pwcs size_t wcstombs(char * restrict s, const wchar_t * restrict pwcs, size_t n); // *pwcs -> *s 21

<string.h> Operationer på char-arrays: void *memcpy(void * restrict s1, const void * restrict s2, size_t n); void *memmove(void *s1, const void *s2, size_t n); // ev. Overlap int memcmp(const void *s1, const void *s2, size_t n); void *memchr(const void *s, int c, size_t n); // letar efter c i *s void *memset(void *s, int c, size_t n); // lägger in n st c i *s 22

Texthantering: char *strcpy (char *s1, const char *s2); char *strncpy(char *s1, const char *s2, size_t n) char *strcat (char *s1, const char *s2); char *strncat(char *s1, const char *s2, size_t n); int strcmp (char *s1, const char *s2); int strncmp(char *s1, const char *s2, size_t n); size_t strlen(const char *s); size_t strspn (const char *s, const char *s2); size_t strcspn(const char *s, const char *s2); /* räkna antalet hexadecimala siffror i början av str */ antalhexsif = strspn(str, "0123456789ABCDEFabdcef"); 23

char *strchr (const char *s, int c); char *strrchr(const char *s, int c); char *strpbrk(const char *s, const char *s2); char *strstr (const char *s, const char *s2); /* byt alla? mot! i strängen str */ char *p = str; while ((p = strchr(p,? ))!= NULL) { *p =! ; /* byt alla "katt" mot "hund" i strängen str */ char *p = str; while ((p = strstr(p, "katt"))!= NULL) { strncpy(p, "hund", 4); 24

char *strtok(char * restrict s1, const char * restrict s2); Ex. #include <string.h> static char str[] = "?a???b,,,#c"; char *t; t = strtok(str, "?"); // t points to the token "a" t = strtok(null, ","); // t points to the token "??b" t = strtok(null, "#,"); // t points to the token "c" t = strtok(null, "?"); // t is a null pointer 25