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.