Beherrschen von Zeichenzeigern und Funktionsgebrauch in C
Was ist ein Zeichenzeiger in C?
Ein Zeichenzeiger speichert die Adresse eines Zeichentyps oder die Adresse des ersten Zeichens eines Zeichenarrays (String). Zeichenzeiger sind sehr nützlich, wenn Sie die Zeichenfolgen bearbeiten.
In C gibt es keinen String-Datentyp. Ein Array vom Typ „char“ wird als String betrachtet. Daher stellt ein Zeiger eines Arrays vom Typ char eine Zeichenfolge dar. Dieser char-Zeiger kann dann als Argument an eine Funktion zur Verarbeitung des Strings übergeben werden.
Deklarieren eines Zeichenzeigers
Ein Zeichenzeiger zeigt auf ein Zeichen oder ein Zeichenarray. Um einen Zeichenzeiger zu deklarieren, verwenden Sie daher die folgende Syntax:
char *pointer_name;
Initialisierung eines Zeichenzeigers
Nachdem Sie einen Zeichenzeiger deklariert haben, müssen Sie ihn mit der Adresse einer Zeichenvariablen initialisieren. Wenn ein Zeichenarray vorhanden ist, können Sie den Zeichenzeiger einfach initialisieren, indem Sie den Namen des Zeichenarrays oder die Adresse der ersten Elemente davon angeben.
Zeichenzeiger des Zeichens
Im Folgenden finden Sie die Syntax zum Initialisieren eines Zeichenzeigers eines Zeichentyps:
char *pointer_name = &char_variable;
Zeichenzeiger des Zeichenarrays
Im Folgenden finden Sie die Syntax zum Initialisieren eines Zeichenzeigers eines Zeichenarrays (Zeichenfolge):
char *pointer_name = char_array; /*or*/ char *pointer_name = &char_array[0];
Beispiel für einen Zeichenzeiger
Im folgenden Beispiel haben wir zwei Variablen, Zeichen und Zeichenarray. Wir verwenden zwei Zeigervariablen, um die Adressen des Zeichens und des Zeichenarrays zu speichern, und drucken dann die Werte der Variablen mithilfe der Zeichenzeiger aus.
#include <stdio.h>
int main() {
// Declare two variables
char x = 'P';
char arr[] = "TutorialsPoint";
// Declaring character pointers
char *ptr_x = &x;
char *ptr_arr = arr;
// Printing values
printf("Value of x : %c\n", *ptr_x);
printf("Value of arr: %s\n", ptr_arr);
return 0;
}
Ausgabe
Führen Sie den Code aus und überprüfen Sie seine Ausgabe −
Value of x : P Value of arr: TutorialsPoint
Zeichenzeiger verstehen
Eine Zeichenfolge wird wie folgt als Array deklariert:−
char arr[] = "Hello";
Die Zeichenfolge ist ein NULL-terminiertes Array von Zeichen. Das letzte Element im obigen Array ist ein NULL-Zeichen (\0).
Deklarieren Sie einen Zeiger vom Typ char und weisen Sie ihm die Adresse des Zeichens an der 0. Position zu −
char *ptr = &arr[0];
Denken Sie daran, dass der Name des Arrays selbst die Adresse des 0. Elements ist.
char *ptr = arr;
Eine Zeichenfolge kann mithilfe eines Zeigers anstelle einer Array-Variablen deklariert werden (keine eckigen Klammern).
char *ptr = "Hello";
Dadurch wird die Zeichenfolge im Speicher und ihre Adresse in ptr gespeichert. Wir können die Zeichenfolge durchlaufen, indem wir ptr.
erhöhen
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
Zugriff auf Zeichen-Array
Wenn Sie ein Zeichenarray mit dem Formatbezeichner %s drucken, können Sie dies tun, indem Sie den Namen des Zeichenzeigers verwenden. Wenn Sie jedoch auf jedes Zeichen des Zeichenarrays zugreifen möchten, müssen Sie vor dem Namen des Zeichenzeigers ein Sternchen (*) verwenden und ihn dann erhöhen.
Beispiel
Hier ist der vollständige Programmcode −
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
}
Ausgabe
Führen Sie den Code aus und überprüfen Sie seine Ausgabe −
Character Pointers and Functions in C
Beispiel
Alternativ können Sie ptr im %s-Format an printf() übergeben, um die Zeichenfolge zu drucken.
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
printf("%s", ptr);
}
Ausgabe
Wenn Sie diesen Code ausführen, erhalten Sie die gleiche Ausgabe −
Character Pointers and Functions in C
Zeichenzeigerfunktionen
Die Header-Dateien „string.h“ definieren eine Reihe von Bibliotheksfunktionen, die eine String-Verarbeitung durchführen, z. B. das Ermitteln der Länge eines Strings, das Kopieren eines Strings und den Vergleich zweier Strings. Diese Funktionen verwenden char-Zeigerargumente.
Die strlen()-Funktion
Die Funktion strlen() gibt die Länge zurück, also die Anzahl der Zeichen in einem String. Der Prototyp der Funktion strlen() lautet wie folgt:−
int strlen(char *)
Beispiel 1
Der folgende Code zeigt, wie Sie die Länge einer Zeichenfolge ausgeben können −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Hello";
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", strlen(ptr));
return 0;
}
Wenn Sie diesen Code ausführen, wird die folgende Ausgabe erzeugt:
Given string: Hello Length of the string: 5
Beispiel 2
Tatsächlich berechnet die Funktion strlen() die Stringlänge gemäß der benutzerdefinierten Funktion str_len(), wie unten gezeigt −
#include <stdio.h>
#include <string.h>
int str_len(char *);
int main(){
char *ptr = "Welcome to Tutorialspoint";
int length = str_len(ptr);
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", length);
return 0;
}
int str_len(char *ptr){
int i = 0;
while(*ptr != '\0'){
i++;
ptr++;
}
return i;
}
Wenn Sie diesen Code ausführen, wird die folgende Ausgabe erzeugt:
Given string: Welcome to Tutorialspoint Length of the string: 25
Die strcpy()-Funktion
Der Zuweisungsoperator ( =) wird nicht verwendet, um einer String-Variablen, also einem char-Zeiger, einen String-Wert zuzuweisen. Stattdessen müssen wir die Funktion strcpy() mit dem folgenden Prototyp verwenden –
char * strcpy(char * dest, char * source);
Beispiel 1
Das folgende Beispiel zeigt, wie Sie die Funktion strcpy() verwenden können −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "How are you doing?";
char *ptr1;
strcpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
Die Funktion strcpy() gibt den Zeiger auf die Zielzeichenfolge ptr1 zurück.
How are you doing?
Beispiel 2
Intern implementiert die Funktion strcpy() die folgende Logik in der benutzerdefinierten Funktion str_cpy() −
#include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main(){
char *ptr = "Using the strcpy() Function";
char *ptr1;
str_cpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
void str_cpy(char *d, char *s){
int i;
for(i = 0; s[i] != '\0'; i++)
d[i] = s[i];
d[i] = '\0';
}
Wenn Sie seinen Code ausführen, wird die folgende Ausgabe erzeugt:-
Using the strcpy() Function
Die Funktion kopiert jedes Zeichen aus der Quellzeichenfolge in das Ziel, bis das NULL-Zeichen „\0“ erreicht ist. Nach der Schleife wird am Ende des Zielarrays ein „\0“-Zeichen hinzugefügt.
Die strcmp()-Funktion
Die üblichen Vergleichsoperatoren (<,>, <=,>=, ==und !=) dürfen nicht zum Vergleich zweier Zeichenfolgen verwendet werden. Stattdessen müssen wir die Funktion strcmp() aus der Header-Datei „string.h“ verwenden. Der Prototyp dieser Funktion lautet wie folgt:−
int strcmp(char *str1, char *str2)
Die Funktion strcmp() hat drei mögliche Rückgabewerte −
- Wenn festgestellt wird, dass beide Zeichenfolgen identisch sind, wird „0“ zurückgegeben.
- Wenn das erste nicht übereinstimmende Zeichen in str1 einen größeren ASCII-Wert hat als das entsprechende Zeichen in str2, gibt die Funktion eine positive Ganzzahl zurück. Dies impliziert, dass str1 nach str2 in alphabetischer Reihenfolge erscheint, wie in einem Wörterbuch.
- Wenn das erste nicht übereinstimmende Zeichen in str1 einen kleineren ASCII-Wert hat als das entsprechende Zeichen in str2, gibt die Funktion eine negative Ganzzahl zurück. Dies impliziert, dass str1 in alphabetischer Reihenfolge vor str2 erscheint, wie in einem Wörterbuch.
Beispiel 1
Das folgende Beispiel zeigt, wie Sie die Funktion strcmp() in einem C-Programm verwenden können −
#include <stdio.h>
#include <string.h>
int main(){
char *s1 = "BASK";
char *s2 = "BALL";
int ret = strcmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string \n");
else
printf("The first string appears before the second string \n");
return 0;
}
Führen Sie den Code aus und überprüfen Sie seine Ausgabe −
The first string appears after the second string
Ändern Sie s1 in BACK und führen Sie den Code erneut aus. Jetzt erhalten Sie die folgende Ausgabe:-
The first string appears before the second string
Beispiel 2
Ein ähnliches Ergebnis können Sie mit der benutzerdefinierten Funktion str_cmp() erhalten, wie im folgenden Code gezeigt −
#include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main(){
char *s1 = "The Best C Programming Tutorial Available Online";
char *s2 = "The Best C Programming Tutorial Available Online";
int ret = str_cmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string\n");
else
printf("The first string appears before the second string\n");
return 0;
}
int str_cmp(char *str1, char *str2) {
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return *str1 - *str2;
}
str1++;
str2++;
}
// If both strings are equal, return 0
return 0;
}
Wenn Sie diesen Code ausführen, wird die folgende Ausgabe erzeugt:
Both strings are identical
Die Funktion str_cmp() vergleicht die Zeichen am gleichen Index in einer Zeichenfolge, bis die Zeichen in einer Zeichenfolge erschöpft sind oder die Zeichen gleich sind.
Wenn ungleiche Zeichen am gleichen Index erkannt werden, wird der Unterschied in ihren ASCII-Werten zurückgegeben. Es gibt „0“ zurück, wenn die Schleife beendet wird.
C Sprache