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 13 Arrays
  gp 13.1 Arrays deklarieren
  gp 13.2 Initialisierung und Zugriff auf Arrays
    gp 13.2.1 Gültigkeitsbereich von Arrays
  gp 13.3 Arrays vergleichen
  gp 13.4 Anzahl der Elemente eines Arrays ermitteln
  gp 13.5 Übergabe von Arrays an Funktionen
  gp 13.6 Arrays aus Funktionen zurückgeben
  gp 13.7 Programmbeispiel zu den Arrays
  gp 13.8 Einlesen von Array-Werten
  gp 13.9 Mehrdimensionale Arrays
  gp 13.10 Mehrdimensionale Arrays initialisieren
    gp 13.10.1 Tic Tac Toe
    gp 13.10.2 Dreidimensionale Arrays
  gp 13.11 Übergabe von zwei- bzw. mehrdimensionalen Arrays an Funktionen
  gp 13.12 Arrays in Tabellenkalkulation einlesen (*.CSV–Dateien)
  gp 13.13 Strings/Zeichenketten (char Array)
    gp 13.13.1 Vom String zur Binärzahl
  gp 13.14 Einlesen von Strings
  gp 13.15 Standard-Bibliothek <string.h>
    gp 13.15.1 strcat() – Strings aneinander hängen
    gp 13.15.2 strchr() – ein Zeichen im String suchen
    gp 13.15.3 strcmp() – Strings vergleichen
    gp 13.15.4 strcpy() – einen String kopieren
    gp 13.15.5 strcspn() – einen Teilstring ermitteln
    gp 13.15.6 strlen() – Länge eines Strings ermitteln
    gp 13.15.7 strncat() – String mit n Zeichen aneinander hängen
    gp 13.15.8 strncmp() – n Zeichen von zwei Strings miteinander vergleichen
    gp 13.15.9 strncpy() – String mit n Zeichen kopieren
    gp 13.15.10 strpbrk() – Auftreten bestimmter Zeichen suchen
    gp 13.15.11 strrchr() – das letzte Auftreten eines bestimmten Zeichens im String suchen
    gp 13.15.12 strspn() – erstes Auftreten eines Zeichens, das nicht vorkommt
    gp 13.15.13 strstr() – String nach Auftreten eines Teilstrings durchsuchen
    gp 13.15.14 strtok() – String anhand bestimmter Zeichen zerlegen


Galileo Computing - Zum Seitenanfang

13.14 Einlesen von Strings  toptop

Die Verarbeitung von Strings ist nicht so leicht, wie Sie vielleicht zunächst vermuten würden. Sehen Sie sich zur Veranschaulichung folgendes Programm an:

/* string6.c */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
   char string[100];
   printf("Geben sie ein paar Wörter ein: ");
   scanf("%99s", &string[0]);
   printf("Ihre Eingabe: %s\n",string);
   return EXIT_SUCCESS;
}

Es wird angenommen, dass folgende Eingabe vorgenommen wurde:

Programmieren in C macht Spass

Folgende Ausgabe bekommen Sie dabei auf dem Bildschirm zu sehen:

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 13.13   Probleme beim Einlesen von Strings mit scanf

Wo sind die restlichen Zeichen? Das Problem liegt hier bei der Funktion scanf(). Denn scanf() liest lediglich bis zum ersten Leerzeichen ein. Also wird eine andere Funktion zum (sicheren) Einlesen von Zeichenketten benötigt.

Gut geeignet wäre die Funktion fgets(), die später noch genauer erklärt wird. Kurz zur Syntax von fgets():

#include <stdio.h>
char *fgets(char *string,int anzahl_zeichen,FILE *stream);

Diese Funktion soll jetzt gegen die Funktion scanf() im Programmbeispiel ausgetauscht werden:

/* string7.c */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
   char str[100];
   printf("Geben sie ein paar Wörter ein : ");
   fgets(str, 100, stdin);
   printf("Ihre Eingabe: %s\n",str);
   return EXIT_SUCCESS;
}

Bei diesem Beispiel werden mit fgets() vom Stream stdin maximal 100 Zeichen in das char-Array str eingelesen, beginnend mit der Anfangsadresse von str. Der Vorteil von fgets() ist dabei, dass mit dieser Funktion keine gefährlichen so genannten Pufferüberläufe (Buffer Overflow) passieren können. Sollten Sie in diesem Beispiel 120 Zeichen eingegeben haben, liest fgets() davon 98 sichtbare Zeichen plus Newline-Zeichen (\n) plus Stringende-Zeichen (\0) ein. fgets() hängt am Ende des Strings immer ein \n–Zeichen an.

Zum Einlesen von Strings noch ein Programmbeispiel:

/* string8.c */
#include <stdio.h>
#include <stdlib.h>
/*Passwort*/
const char p[]=  { "123xyz456" };
int check_passwort(char passw[]) {
   int i, n = sizeof(p) / sizeof(char);
   for(i=0; i < n; i++)
      if(passw[i] != p[i])
         return 0; /* Falsches Passwort */
   return 1;   /* Richtiges Passwort */
}
int main(void) {
   char Name[20], passwort[10];
   printf("Login-Name : ");
   fgets(Name, 20, stdin);
   printf("Passwort   : ");
   fgets(passwort, 10, stdin);
   if( check_passwort(passwort) == 1)
      printf("Willkommen im System %s\n",Name);
   else
      printf("Falsches Passwort! Systemzugriff verweigert.\n");
   return EXIT_SUCCESS;
}

Hier haben Sie ein Programm für eine einfache Passwort-Abfrage, die innerhalb der Funktion check_passwort ausgeführt wird. Die Funktion durchläuft n Zeichen.

Stimmen alle eingegebenen Zeichen überein, gibt die Funktion 1 zurück. Stimmt ein Zeichen nicht überein, beendet sich die Funktion mit dem Rückgabewert 0.

In Kapitel 14, Zeiger (Pointer), werden Sie noch mehr über Strings erfahren.

 << 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