Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 22 Weitere Headerdateien und ihre Funktionen (ANSI C)
  gp 22.1 <assert.h> -– Testmöglichkeiten und Fehlersuche
  gp 22.2 <ctype.h> – Zeichenklassifizierung und Umwandlung
  gp 22.3 Mathematische Funktionen – <math.h>
  gp 22.4 <stdlib.h>
    gp 22.4.1 Programmbeendigung – exit(), _exit(), atexit() und abort()
    gp 22.4.2 Konvertieren von Strings in numerische Werte
    gp 22.4.3 Bessere Alternative – Konvertieren von Strings in numerische Werte
    gp 22.4.4 Zufallszahlen
    gp 22.4.5 Absolutwerte, Quotient und Rest von Divisionen
    gp 22.4.6 Suchen und Sortieren – qsort() und bsearch()
    gp 22.4.7 system()
  gp 22.5 <locale.h> – Länderspezifische Eigenheiten
  gp 22.6 <setjmp.h>
  gp 22.7 <signal.h>
  gp 22.8 <string.h> – Die mem…-Funktionen zur Speichermanipulation
    gp 22.8.1 memchr() – Suche nach einzelnen Zeichen
    gp 22.8.2 memcmp() – Bestimmte Anzahl von Bytes vergleichen
    gp 22.8.3 memcpy() – Bestimmte Anzahl von Bytes kopieren
    gp 22.8.4 memmove() – Bestimmte Anzahl von Bytes kopieren
    gp 22.8.5 memset() – Speicherbereich mit bestimmten Zeichen auffüllen
  gp 22.9 Erweiterter ANSI C-Standard (ANSI C99)
    gp 22.9.1 Neue elementare Datentypen
    gp 22.9.2 <stdint.h> – Ganzzahlige Typen mit vorgegebener Breite
    gp 22.9.3 Komplexe Gleitpunkttypen
    gp 22.9.4 <iso646.h> – Symbolische Konstanten für Operatoren
    gp 22.9.5 Deklaration von Bezeichnern
    gp 22.9.6 inline-Funktionen
    gp 22.9.7 Vordefinierte Makros
    gp 22.9.8 <math.h> – Neue Funktionen
    gp 22.9.9 <wchar.h> – (NA1)
    gp 22.9.10 <wctype.h> (NA1)
    gp 22.9.11 <fenv.h> – Kontrolle der Gleitpunkzahlen-Umgebung
    gp 22.9.12 <inttypes.h> – Für genauere Integer-Typen
    gp 22.9.13 <tgmath.h> – Typengenerische Mathematik-Funktionen
    gp 22.9.14 Zusammenfassung


Galileo Computing - Zum Seitenanfang

22.8 <string.h> – Die mem…-Funktionen zur Speichermanipulation  downtop

Die meisten Stringfunktionen wurden bereits an früherer Stelle behandelt. Aber einige Funktionen habe ich Ihnen bislang noch unterschlagen. Mit den mem...-Funktionen in der Headerdatei <string.h> können Sie ganze Speicherblöcke kopieren, vergleichen, initialisieren und durchsuchen.


Galileo Computing - Zum Seitenanfang

22.8.1 memchr() – Suche nach einzelnen Zeichen  downtop

Die Syntax:

void *memchr(const void *buffer, int c, size_t n);

Diese Funktion sucht in den ersten n Bytes in buffer nach dem Zeichen c. Sollten Sie den ganzen String durchsuchen wollen, können Sie die Funktion strchr() verwenden. Tritt dabei ein Fehler auf oder wird das Zeichen nicht gefunden, gibt diese NULL zurück. Ein Beispiel:

/* memchr.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
   char str[] = "Have a lot of fun";
   char *p;
   char ch = 'l';
   p = (char *) memchr(str, ch, 10);
   if(NULL == p)
      printf("%c kommt nicht in den ersten 10 Bytes vor\n", ch);
   else
      printf("%c gefunden an Pos. %d\n", ch, p-str);
   return EXIT_SUCCESS;
}

Galileo Computing - Zum Seitenanfang

22.8.2 memcmp() – Bestimmte Anzahl von Bytes vergleichen  downtop

Die Syntax:

int memcmp( const void *s1, const void *s2, size_t n);

Mit memcmp() werden die ersten n Bytes im Puffer s1 mit dem Puffer s2 lexografisch verglichen. Der Rückgabewert ist derselbe wie schon bei strcmp(). Ist s1 größer als s2, ist der Rückgabewert kleiner als 0. Ist s2 größer als s1, ist die Rückgabe größer als 0, und bei Gleichheit beider Speicherbereiche wird 0 zurückgegeben.

/* memcmp.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
   char str1[] = "Have a lot of fun";
   char str2[] = "Have more than a lot of fun";
   int check, i;
   for(i = 4; i <= 10; i+=6) {
      check = memcmp( str1, str2, i);
      if(check == 0)
         printf("Vergleich %d Bytes: "
                "Beide Strings sind gleich\n", i);
      else
         printf("Die ersten %d Bytes sind "
                "unterschiedlich\n", i);
   }
   return EXIT_SUCCESS;
}

Galileo Computing - Zum Seitenanfang

22.8.3 memcpy() – Bestimmte Anzahl von Bytes kopieren  downtop

Die Syntax:

void *memcpy(void *dest, const void *src, size_t n);

Mit der Funktion memcpy() können Sie n Bytes aus dem Puffer src in den Puffer dest kopieren. Die Funktion gibt die Anfangsadresse von dest zurück.

/* memcpy.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
   char str[] = "Ein Wort was hier nicht hingehört: Mist!";
   char replace[] = "M***";
   char *ptr;
   ptr = strstr(str, "Mist");
   memcpy(ptr, replace, strlen(replace));
   printf("%s\n",str);
   return EXIT_SUCCESS;
}

Galileo Computing - Zum Seitenanfang

22.8.4 memmove() – Bestimmte Anzahl von Bytes kopieren  downtop

Die Syntax:

void *memmove(void *dest, const void* src, size_t n);

Die Funktion erfüllt denselben Zweck wie die Funktion memcp(), mit einem einzigen, aber gravierenden Unterschied. memmove() stellt sicher, dass im Fall einer Überlappung der Speicherbereiche der Überlappungsbereich zuerst gelesen und dann überschrieben wird. Auch die Rückgabewerte sind bei memmove() dieselben wie bei memcpy().

/* memmove.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
   char str[21] = "1234567890";
   /* Den kompletten String nehmen und
    * 10 Bytes weiter als Kopie ablegen */
   memmove(str+10, str, sizeof(str)-1);
   printf("%s\n",str);
   return EXIT_SUCCESS;
}

Galileo Computing - Zum Seitenanfang

22.8.5 memset() – Speicherbereich mit bestimmten Zeichen auffüllen  toptop

Die Syntax:

void *memset(void *dest, int ch, unsigned int n);

Mit dieser Funktion füllen Sie die ersten n Bytes der Adresse dest mit den Zeichen ch auf.

/* memset.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
   char credit_card[21] = "123456-aiex";
   char *ptr = strchr(credit_card, '-');
   *ptr++;
   /* Die letzten vier Zeichen der Kreditkartennummer
    * nicht angeben */
   memset(ptr, '*', 4);
   printf("%s\n",credit_card);
   return EXIT_SUCCESS;
}
 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de