Linux C Programming Tutorial Teil 9: Zeichenketten

In dieser laufenden C-Programmier-Tutorialreihe haben wir bereits auf das Konzept der Character-Arrays eingegangen. Eng mit Character-Arrays verbunden ist das Konzept der Zeichenketten, auf das wir hier eingehen werden.

Eine Zeichenkette unterscheidet sich von einer Zeichenkette in einem Hauptbereich – sie wird durch ein Nullzeichen ‚\0‘ abgeschlossen. Es gibt kein solches terminierendes Zeichen in einem Zeichenarray. Das folgende Stück Code zeigt einige Möglichkeiten, wie eine Zeichenkette definiert werden kann:

#include <stdio.h>
int main()
{
char str[] = "string";
char str1[] = {'s','t','r','i','n','g','\0'};
char str2[10] = "string";
char str3[10] = {'s','t','r','i','n','g','\0'};
char *str4 = "string";

printf("\n str=%s, str1=%s, str2=%s, str3=%s, and str4=%s", str, str1, str2, str3, str4);

return 0;
}

Ein Haufen von Zeichen in doppelten Anführungszeichen ist also eine Zeichenkette (das Beenden des Nullzeichens ist dort implizit), und eine Reihe von Zeichen, die explizit mit einem \0-Zeichen enden, ist auch eine Zeichenkette.

Die Ausgabe dieses Programms ist:

 str=string, str1=string, str2=string, str3=string, and str4=string

Beachten Sie, dass Sie auf diese Weise keine nicht-stringigen Zeichenarrays drucken können, da es dort keinen Null-Zeichensatz gibt, der das Ende des Arrays kennzeichnet. Hier ist ein Stück Code, der versucht, dies zu tun:

#include <stdio.h>
int main()
{
char str[] = {'e','n','d'};
char c ='t';

printf("\n str=%s", str);

return 0;
}

Aber am Ende druckt er stattdessen Garbage-Werte am Ende aus:

str=end??

Weiter geht es, genau wie die %s-Formatangabe in’Printf‘ dem Compiler sagt, Eingabevariablen als Zeichenketten zu behandeln, können Sie %s auch in der Funktion’scanf‘ verwenden, um Zeichenketten als Eingabe vom Benutzer zu akzeptieren. Hier ist ein Beispiel:

#include <stdio.h>
int main()
{
char str[30];

printf("\n Enter a string with length less than 30 characters: ");
scanf("%s",str);

printf("\n str=%s", str);

return 0;
}

Es ist erwähnenswert, dass eine Folge von Null oder mehr Zeichen, die von doppelten Anführungszeichen umgeben ist, als Zeichenkettenkonstante oder Zeichenkettenliteral bezeichnet wird. Das bedeutet, dass sowohl „howtoforge“ als auch „“ Zeichenkettenkonstanten oder Zeichenkettenliterale sind.

Sie können die Länge einer Zeichenkette mit der Standard-Funktion strlen() ermitteln. Hier ist ein Beispiel:

#include <stdio.h>
int main()
{
char str[] = "howtoforge";

printf("\n Length of string 'howtoforge' is: %d", strlen(str));

return 0;
}

Die von diesem Programm erzeugte Ausgabe ist 10, was genau der Anzahl der Zeichen in „howtoforge“ und damit seiner Länge entspricht.

In diesem Zusammenhang ist zu beachten, dass sich ein Zeichen in einfachen Anführungszeichen (wie’d‘) und ein Zeichen in doppelten Anführungszeichen (wie „d“) voneinander unterscheiden: Während das erste eine Zeichenkonstante ist (die verwendet werden kann, um den Zahlenwert des Zeichens im Zeichensatz der Maschine zu erzeugen), ist das zweite eine eine Zeichenkette (d.h. es ist ein endendes \0-Zeichen enthalten).

Abschließend lassen Sie uns kurz einen Blick darauf werfen, wie Zeichenketten als Argumente an Funktionen übergeben werden können.

#include <stdio.h>
void change_value(char s[])
{
s[0] = 'H';
s[5] = 'F';

printf("%s", s);

}

int main()
{
char str[] = "howtoforge";

change_value(str);

return 0;
}

Im obigen Programm ist es also der Name des Arrays’str‘, der als Argument übergeben wird, weil er sich auf die Basisadresse des Arrays bezieht. Die Deklaration der Funktion’change_value‘ ist so, dass sie ein Array als Eingabe erwartet. Hier ist die Ausgabe dieses Programms:

HowtoForge

Fazit

Daher haben wir in diesem Tutorial die Grundlagen von Zeichenketten diskutiert, einschließlich der Frage, wie sie definiert sind und wie sie verwendet werden können. Wir werden mehr über Zeichenketten in den kommenden Tutorials erfahren, aber dieser Artikel sollte ausreichen, um Ihnen den Einstieg zu erleichtern. Lassen Sie uns in den Kommentaren unten wissen, wenn Sie Fragen oder Zweifel bezüglich Zeichenketten haben.

Das könnte Dich auch interessieren …