Die Standard-Bibliothek <string.h> - C-String

Im weiteren Verlauf dieses Buchs werden Sie öfters Funktionen der Headerdatei <string.h> verwenden. Darin sind viele nützliche Funktionen enthalten, die die Arbeit mit Char-Arrays (=C-Strings) vereinfachen.

strcpy() - char Arrays kopieren

Wollen Sie ein char-Array in ein anderes char-Array kopieren, können Sie die Funktion strcpy() (string copy) nutzen. Die Syntax lautet:

char *strcpy(char *s1, char *s2);

Dass hierbei das char-Array s1 groß genug sein muss, versteht sich von selbst. Bitte beachten Sie dabei, dass das Ende-Zeichen '\0' auch Platz in s1 benötigt. Hierzu ein Beispiel:

Beispiel:

#include <string.h>
#include <iostream>
 
using namespace std;
 
int main(void) {
 
   char ziel_str[50];
   char str1[] = "Das ist ";
   char str2[] = "ein ";
   char str3[] = "Teststring";
 
   strcpy(ziel_str, str1);
   /* Ein umständliches Negativbeispiel */
   strcpy(&ziel_str[8], str2);
   /* So ist es einfacher und sicherer */
   strcat(ziel_str, str3);
 
   cout << ziel_str;
}

Ausgabe:

Das ist ein Teststring

In diesem Beispiel haben Sie gesehen, dass es auch möglich ist, mit strcpy() Strings aneinanderzuhängen:

strcpy(&ziel_str[8], str2);

Nur ist das umständlich, und schließlich gibt es dafür die Funktion strcat(). Beim Betrachten der Funktion strcpy() fällt außerdem auf, dass hierbei ebenfalls nicht überprüft wird, wie viele Zeichen in den Zielstring kopiert werden, mit denen wieder auf einen undefinierten Speicherbereich zugegriffen werden kann. Daher ist auch die Funktion strcpy() eine gefährliche Funktion, wenn diese falsch eingesetzt wird.

strcat() – char Arrays aneinanderhängen

Um ein char-Array an ein anderes zu hängen, können Sie die Funktion strcat() (string catenation) verwenden.

char *strcat(char *s1, char *s2);

Damit wird s2 an das Ende von s1 angehängt, wobei (logischerweise) das Stringende-Zeichen '\0' am Ende von String s1 überschrieben wird. Voraussetzung ist auch, dass der String s2 Platz in s1 hat.

Beispiel:

#include <string.h>
#include <iostream>
 
using namespace std;
 
int main(void) {
   char ziel[30]="ABC\0";
   char name[20]="XYZ\0";
 
   strcat(ziel, name);
   cout << ziel;
 
   return 0;
}

Ausgabe:

ABCXYZ

strcmp() - char-Arrays vergleichen

Für das lexikografische Vergleichen zweier char-Arrays kann die Funktion strcmp() verwendet werden. Die Syntax lautet:

int strcmp(char *s1, char *s2);

Sind beide char-Arrays identisch, gibt diese Funktion 0 zurück. Ist der String s1 kleiner als s2, ist der Rückgabewert kleiner als 0; und ist s1 größer als s2, dann ist der Rückgabewert größer als 0. Ein Beispiel:

#include <string.h>
#include <iostream>
 
using namespace std;
 
void String_Vergleich(char s1[], char s2[]);
 
int main(void) {
   char str1[] = "aaa";
   char str2[] = "bab";
   char str3[] = "cbb";
 
   String_Vergleich(str1, str2);
   String_Vergleich(str1, str3);
   String_Vergleich(str3, str2);
   String_Vergleich(str1, str1);
 
   return 0;
}
 
void String_Vergleich(char s1[], char s2[]) {
   	int ret = strcmp (s1, s2);
 	if(ret == 0)
 	{
		cout << s1 << " == " << s2 << endl;
   	}
   	else if(ret < 0)
	{
    	cout << s1 << " < " << s2 << " --> das erste ungleiche Zeichen in s1 ist kleiner als in s2!" << endl;
	}
	else {
		cout << s1 << " > " << s2 << " --> das erste ungleiche Zeichen in s1 ist groesser als in s2!" << endl;
	}
}

Ausgabe:

aaa < bab --> das erste ungleiche Zeichen in s1 ist kleiner als in s2!
aaa < cbb --> das erste ungleiche Zeichen in s1 ist kleiner als in s2!
cbb > bab --> das erste ungleiche Zeichen in s1 ist groesser als in s2!
aaa == aaa

strlen() – Länge eines char-Arrays ermitteln

Um die Länge eines Strings zu ermitteln, kann die Funktion strlen() (string length) eingesetzt werden. Die Syntax lautet:

size_t strlen(char *s1);

Damit wird die Länge des adressierten char-Arrays s1 ohne das abschließende Stringende-Zeichen zurückgegeben. Das Beispiel zu strlen():

#include <string.h>
#include <iostream>
 
using namespace std;
 
int main(void) {
   char string[] = "Das ist ein Teststring";
   size_t laenge;
 
   laenge = strlen(string);
   cout << laenge << endl;
 
   char teststring[] ="Das\0 ist ein Test";
   cout << strlen(teststring) << endl; 
 
   return 0;
}

HINWEIS: Dass die Funktion strlen() das Stringende-Zeichen '\0' nicht mitzählt, ist eine häufige Fehlerquelle, wenn es darum geht, dynamisch Speicher für einen String zu reservieren. Denken Sie daran, dass Sie immer Platz für ein Zeichen mehr bereithalten.

Ausgabe:

22
3

Weitere char-Array Funktionen

siehe char-Array Funktionen