Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher"—  Präsentation transkript:

1 Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Hochschule Fulda – FB AI Sommersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ

2 Klassifizierungsfunktionen für Zeichen #include <ctype.h>
ctype-Funktionen 1 Klassifizierungsfunktionen für Zeichen #include <ctype.h> alle Funktionen liefern Rückgabewert ≠ 0, wenn Test ok, 0 sonst die wichtigsten Funktionen int isalpha(int c) Test, ob c Buchstabe ist int isdigit(int c) Test, ob c Ziffer ist Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

3 ctype-Funktionen 2 int isalnum(int c) Test, ob c Buchstabe oder Ziffer ist int isupper(int c) Test, ob c Großbuchstabe ist int islower(int c) Test, ob c Kleinbuchstabe ist int isprint(int c) Test, ob c druckbares Zeichen (+ Leerzeichen) ist int tolower(int c) wandelt c von Groß- in Kleinbuchstaben um int toupper(int c) wandelt c von Klein- in Großbuchstaben um Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

4 ctype-Funktionen 3 Implementierung isalnum() für ASCII
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

5 ctype-Funktionen 4 Implementierung tolower() für ASCII
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

6 Stringfunktionen 1 String als eigener Datentyp existiert in C genau genommen nicht! Strings sind Arrays vom Typ char oder Pointer auf char: char b[LEN]; bietet Platz für LEN-1 Zeichen char *s; Pointer s gültig erst nach Zuweisung auf char-Array, Konstante oder dyn. Speicherallozierung Strings werden mit ASCII-NUL terminiert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

7 Stringfunktionen 2 C-Standardbibliothek bietet eine große Menge an Stringfunktionen an wichtige Konvertierungsfunktionen #include <stdlib.h> int atoi(char *s) wandelt String s in int long atol(char *s) wandelt String s in long double atof(char *s) wandelt String s in double Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

8 Stringfunktionen 3 Weitere Konvertierungsfunktionen
#include <stdio.h> int sscanf(char *s, char *fmt,...) formatierte Konvertierung aus dem String s wie scanf() und fscanf() Beispiel: char *s = " "; int l; double d; sscanf(s, "%ld %lf", &l, &d); int sprintf(char *s, char *fmt, …) formatierte Ausgabe auf String s wie printf() und fprintf() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

9 Stringfunktionen 4 die wichtigsten Grundfunktionen
#include <string.h> int strlen(char *s) liefert Länge des String s char *strcpy(char *s1, char *s2) kopiert String s2 nach String s1, bis zum s2 terminierenden NUL, liefert Ptr auf s1 Achtung: Pufferüberlauf! char *strncpy(char *s1, char *s2, int n) kopiert String s2 nach String s1, max n Zeichen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

10 Stringfunktionen 5 char *strcat(char *s1, char *s2)
Hängt Kopie von s2 an s1, liefert Ptr auf s1 Achtung: Pufferüberlauf! char *strncat(char *s1, char *s2, int n) Hängt Kopie von s2 an s1, max. n Zeichen int strcmp(char *s1, char *s2) vergleicht zeichenweise s1 und s2 liefert 0 bei Gleichheit sonst Differenz *s1-*s2 bei erstem Unterschied Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

11 Stringfunktionen 6 int strncmp(char *s2, char *s2, int n)
Stringvergleich bis max. n Zeichen sonst wie strcmp() char *strchr(char *s, int c) liefert Pointer auf Position des ersten Auftretens von Zeichen c im String s, sonst NULL char *strrchr(char *s, int c) liefert Pointer auf Position des letzten Auftretens von Zeichen c im String s, sonst NULL also wie strchr() vom Stringende her Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

12 Stringfunktionen 7 char *strstr(char *s1, char *s2)
liefert Pointer auf Position des ersten Auftretens von String s2 im String s1, sonst NULL char *strdup(char *s) alloziert Speicher für eine Kopie des String s und kopiert diesen dorthin liefert Pointer auf Kopie oder NULL bei Fehler Implementierung char *ns; if(ns = malloc(strlen(s) + 1)) return(strcpy(ns, s)); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

13 Stringfunktionen 8 Implementierung von strlen()
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

14 Stringfunktionen 9 Implementierung von strcmp()
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

15 Stringfunktionen 10 Memory- / Binärfunktionen
void *memset(void *m, int c, size_t n) kopiert n mal das Zeichen c in den Speicherbereich m void *memcpy(void *m1, void *m2, size_t n) kopiert n Bytes von Speicherbereich m2 nach m1 void *memmove(void *m1, void *m2, size_t n) Überlappungen der Bereiche werden korrekt behandelt void *memcmp(void *m1, void *m2, size_t n) Vergleich von n Bytes der Speicherbereiche m1 und m2 void *memchr(void *m, int c, size_t n) liefert Pointer auf erstes Auftreten von c in m, sonst NULL Achtung! Es finden keine Bereichsprüfungen statt! Overflow! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

16 Dynamischer Speicher 1 Funktionen zur Anforderung und Freigabe von dynamischem Speicher (Heap) #include <stdlib.h> Anforderung von Speicher: void *malloc(size_t s) s Bytes allozieren return NULL bei Fehler, sonst Pointer auf Speicherbereich void *calloc(size_t n, size_t s) s * n Bytes allozieren und mit 0 initialisieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

17 Dynamischer Speicher 2 Freigabe von alloziertem Speicher
void free(void *ptr) Speicher von ptr wieder freigeben Beispiel: char buf[BUFLEN], *sptr; size_t slen; if(fgets(buf, sizeof(buf) - 1, stdin)) { slen = strlen(buf); sptr = (char *) malloc(slen + 1); if(sptr == NULL) /* Fehler ... */ (void) strcpy(sptr, buf); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

18 Dynamischer Speicher 3 Implementierung von strdup()
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Herunterladen ppt "Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher"

Ähnliche Präsentationen


Google-Anzeigen