C-Strings

In C ist jede Zeichenkette (String) ein 'array of char terminated by zero'. Terminated by zero bedeutet, dass am Ende jeder Zeichenkette eine 0 steht. Mit Hilfe dieser 0 ist es möglich zu wissen wo die Zeichenkette endet.

"hallo" besteht somit aus 6 Zeichen: 'h', 'a', 'l', 'l', 'o' und 0. Der Umgang mit diesen Zeichenketten ist nicht einfach, deshalb gibt es in C++ die Klasse string, die wir bereits kennengelernt haben. Aber es ist dennoch wichtig zu wissen, wie man mit C-String umgehen kann.

    #include<iostream>
    using namespace std;
    
    void print(char const* str)
    {
      while(*str != 0) //oder: while(*str)
      {
        cout<<*str;
        ++str;
      }
    }
    
    int main()
    {
      print("Hallo Welt\n");
    }

Diese code gibt "Hallo Welt\n" aus. Natürlich könnte man die Zeichenkette "Hallo Welt\n" auch direkt ausgeben.

Bei C-String muss man sehr genau aufpassen, dass man nicht über den Speicher hinausschreibt:

    #include<iostream>
    using namespace std;
    
    void string_copy(char* target, char const* source)
    {
      while(*source)
      {
        *target=*source;
        ++target;
        ++source;
      }
      *target=*source; //null-zeichen
    
      //oder kürzer: while(*target++=*source++);
    }
    
    int main()
    {
      char buf[5];
      string_copy(buf,"Hallo");  //PENG
    }

Weiters gilt zu beachten, dass die Zeichenkette "Hallo" nicht änderbar ist:

    char* p="Hallo";
    p[1]='e'; //PENG
    

In der Header-Datei <cstring> finden sich einige hilfreiche Funktionen zur Handhabung von C-Strings: strcpy(ziel, quelle) zum kopieren eines Strings in einen anderen. strcat(ziel, quelle) zum anhängen eines Strings an einen anderen und strcmp(str1, str2) zum vergleichen von 2 Strings. strcmp liefert 0 wenn beide Zeichenkette identisch sind.

top