Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

Zeiger auf Zeichen und Funktionsverwendung in C meistern

Was ist ein Zeichen-Zeiger in C?

Ein Zeichen-Zeiger speichert die Adresse eines Zeichentyps oder die Adresse des ersten Zeichens eines Zeichen-Arrays (Strings). Zeichen-Zeiger sind sehr nützlich, wenn Sie Strings manipulieren möchten.

In C gibt es keinen String-Datentyp. Ein Array vom Typ „char“ wird als String betrachtet. Daher stellt ein Zeiger auf ein char-Array einen String dar. Dieser char-Zeiger kann dann als Argument an eine Funktion übergeben werden, um den String zu verarbeiten.

Deklaration eines Zeichen-Zeigers

Ein Zeichen-Zeiger zeigt auf ein Zeichen oder ein Zeichen-Array. Um einen Zeichen-Zeiger zu deklarieren, verwenden Sie folgende Syntax:

 char *zeiger_name; 

Initialisierung eines Zeichen-Zeigers

Nach der Deklaration müssen Sie den Zeichen-Zeiger mit der Adresse einer Zeichen-Variable initialisieren. Handelt es sich um ein Zeichen-Array, können Sie den Zeiger einfach mit dem Namen des Arrays oder der Adresse des ersten Elements initialisieren.

Zeichen-Zeiger auf ein einzelnes Zeichen

Die Syntax zur Initialisierung eines Zeichen-Zeigers auf eine Zeichen-Variable:

 char *zeiger_name = &char_variable; 

Zeichen-Zeiger auf ein Zeichen-Array (String)

Die Syntax zur Initialisierung eines Zeichen-Zeigers auf ein Zeichen-Array:

 char *zeiger_name = char_array; /*oder*/ char *zeiger_name = &char_array[0]; 

Beispiel für Zeichen-Zeiger

Im folgenden Beispiel haben wir eine Zeichen-Variable und ein Zeichen-Array. Zwei Zeigervariablen speichern die Adressen, und wir geben die Werte über die Zeiger aus.

 #include <stdio.h>
int main() {
    // Variablen deklarieren
    char x = 'P';
    char arr[] = "TutorialsPoint";
    // Zeichen-Zeiger deklarieren
    char *ptr_x = &x;
    char *ptr_arr = arr;
    // Werte ausgeben
    printf("Wert von x : %c\n", *ptr_x);
    printf("Wert von arr: %s\n", ptr_arr);
    return 0;
} 

Ausgabe

Führen Sie den Code aus und prüfen Sie die Ausgabe:

 Wert von x : P
Wert von arr: TutorialsPoint 

Zeichen-Zeiger verstehen

Ein String wird als Array deklariert:

 char arr[] = "Hallo"; 

Der String ist ein null-terminiertes Zeichen-Array. Das letzte Element ist das Null-Zeichen (\0).

Deklarieren Sie einen char-Zeiger und weisen Sie ihm die Adresse des Zeichens an Position 0 zu:

 char *ptr = &arr[0]; 

Der Name des Arrays ist selbst die Adresse des 0. Elements:

 char *ptr = arr; 

Ein String kann auch direkt über einen Zeiger deklariert werden (ohne eckige Klammern):

 char *ptr = "Hallo"; 

Dadurch wird der String im Speicher abgelegt und seine Adresse in ptr gespeichert. Wir können den String durch Inkrementieren von ptr durchlaufen:

 while(*ptr != '\0') {
    printf("%c", *ptr);
    ptr++;
} 

Zugriff auf Zeichen-Arrays

Wenn Sie ein Zeichen-Array mit dem Formatbezeichner %s ausgeben, können Sie einfach den Namen des Zeichen-Zeigers verwenden. Um jedoch auf jedes einzelne Zeichen zuzugreifen, müssen Sie ein Sternchen (*) vor den Zeigernamen setzen und diesen dann inkrementieren.

Beispiel

Hier ist der vollständige Programmcode:

 #include <stdio.h>
int main() {
    char arr[] = "Zeichen-Zeiger und Funktionen in C";
    char *ptr = arr;
    while(*ptr != '\0') {
        printf("%c", *ptr);
        ptr++;
    }
} 

Ausgabe

Führen Sie den Code aus und prüfen Sie die Ausgabe:

 Zeichen-Zeiger und Funktionen in C 

Alternative Ausgabe mit %s

Alternativ können Sie ptr an printf() mit %s übergeben, um den String auszugeben.

 #include <stdio.h>
int main() {
    char arr[] = "Zeichen-Zeiger und Funktionen in C";
    char *ptr = arr;
    printf("%s", ptr);
} 

Ausgabe

Beim Ausführen erhalten Sie die gleiche Ausgabe:

 Zeichen-Zeiger und Funktionen in C 

Zeichen-Zeiger-Funktionen

Die Header-Datei „string.h“ definiert eine Reihe von Bibliotheksfunktionen zur String-Verarbeitung, wie das Ermitteln der String-Länge, das Kopieren und das Vergleichen von Strings. Diese Funktionen verwenden char-Zeiger als Argumente.

Die strlen()-Funktion

Die Funktion strlen() gibt die Länge eines Strings zurück, also die Anzahl der Zeichen. Der Prototyp lautet:

 int strlen(char *) 

Beispiel 1

Der folgende Code zeigt, wie Sie die Länge eines Strings ausgeben:

 #include <stdio.h>
#include <string.h>
int main() {
    char *ptr = "Hallo";
    printf("Gegebener String: %s \n", ptr);
    printf("Länge des Strings: %d", strlen(ptr));
    return 0;
} 

Die Ausgabe:

 Gegebener String: Hallo
Länge des Strings: 5 

Beispiel 2: Benutzerdefinierte Implementierung

Im Grunde berechnet strlen() die Länge ähnlich wie die folgende benutzerdefinierte Funktion str_len():

 #include <stdio.h>
#include <string.h>
int str_len(char *);
int main() {
    char *ptr = "Willkommen bei Tutorialspoint";
    int length = str_len(ptr);
    printf("Gegebener String: %s \n", ptr);
    printf("Länge des Strings: %d", length);
    return 0;
}
int str_len(char *ptr) {
    int i = 0;
    while(*ptr != '\0') {
        i++;
        ptr++;
    }
    return i;
} 

Ausgabe:

 Gegebener String: Willkommen bei Tutorialspoint
Länge des Strings: 25 

Die strcpy()-Funktion

Der Zuweisungsoperator (=) wird nicht verwendet, um einem Zeichen-Zeiger einen String-Wert zuzuweisen. Stattdessen benötigen wir die Funktion strcpy() mit folgendem Prototyp:

 char * strcpy(char * ziel, char * quelle); 

Beispiel 1

Das folgende Beispiel zeigt die Verwendung von strcpy():

 #include <stdio.h>
#include <string.h>
int main() {
    char *ptr = "Wie geht es dir?";
    char *ptr1;
    strcpy(ptr1, ptr);
    printf("%s", ptr1);
    return 0;
} 

Die Funktion strcpy() gibt den Zeiger auf den Zielstring ptr1 zurück.

 Wie geht es dir? 

Beispiel 2: Interne Logik

Intern implementiert strcpy() etwa folgende Logik in einer benutzerdefinierten Funktion str_cpy():

 #include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main() {
    char *ptr = "Verwendung der strcpy()-Funktion";
    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';
} 

Ausgabe:

 Verwendung der strcpy()-Funktion 

Die Funktion kopiert jedes Zeichen vom Quell- zum Zielstring, bis das Null-Zeichen „\0“ erreicht ist. Nach der Schleife fügt sie ein „\0“ am Ende des Ziel-Arrays hinzu.

Die strcmp()-Funktion

Die üblichen Vergleichsoperatoren (<, >, <=, >=, ==, !=) dürfen nicht zum Vergleichen zweier Strings verwendet werden. Stattdessen nutzen wir strcmp() aus „string.h“. Der Prototyp:

 int strcmp(char *str1, char *str2) 

strcmp() hat drei mögliche Rückgabewerte:

Beispiel 1

Das folgende Beispiel demonstriert die Verwendung von strcmp():

 #include <stdio.h>
#include <string.h>
int main() {
    char *s1 = "BASK";
    char *s2 = "BALL";
    int ret = strcmp(s1, s2);
    if (ret == 0)
        printf("Beide Strings sind identisch\n");
    else if (ret > 0)
        printf("Der erste String steht hinter dem zweiten String\n");
    else
        printf("Der erste String steht vor dem zweiten String\n");
    return 0;
} 

Ausgabe:

 Der erste String steht hinter dem zweiten String 

Ändern Sie s1 in „BACK“ und führen Sie den Code erneut aus. Die Ausgabe lautet nun:

 Der erste String steht vor dem zweiten String 

Beispiel 2: Benutzerdefinierte Implementierung

Ein ähnliches Ergebnis erzielt die benutzerdefinierte Funktion str_cmp():

 #include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main() {
    char *s1 = "Das beste C-Programmier-Tutorial online";
    char *s2 = "Das beste C-Programmier-Tutorial online";
    int ret = str_cmp(s1, s2);
    if (ret == 0)
        printf("Beide Strings sind identisch\n");
    else if (ret > 0)
        printf("Der erste String steht hinter dem zweiten String\n");
    else
        printf("Der erste String steht vor dem zweiten String\n");
    return 0;
}
int str_cmp(char *str1, char *str2) {
    while (*str1 != '\0' && *str2 != '\0') {
        if (*str1 != *str2) {
            return *str1 - *str2;
        }
        str1++;
        str2++;
    }
    // Wenn beide Strings gleich sind, 0 zurückgeben
    return 0;
} 

Ausgabe:

 Beide Strings sind identisch 

Die Funktion str_cmp() vergleicht die Zeichen an gleicher Position, bis die Zeichen eines Strings erschöpft sind oder sie sich unterscheiden. Bei Ungleichheit wird die Differenz der ASCII-Werte zurückgegeben. Bei Abbruch der Schleife wird 0 zurückgegeben.


C Sprache

  1. Der C-Präprozessor (CPP) verstehen: Wie er die Kompilierung vereinfacht
  2. Rekursion in C meistern: Best Practices & Abbruchbedingungen
  3. Versiegelte Klassen und Methoden in C# meistern
  4. Zeiger in C: Umfassender Leitfaden zu Typen, Verwendung und Best Practices
  5. C Datei-E/A meistern: Dateien erstellen, öffnen, lesen, schreiben und schließen
  6. Bedingte Logik in C# meistern: If, If-Else, If-ElseIf und verschachtelte If-Anweisungen
  7. C# Zugriffsmodifizierer (Specifiers) verstehen: Mit praktischen Beispielen
  8. C# Static Keyword: Statische Variablen, Methoden und Klassen meistern
  9. C++ Standardfunktionsargumente: Funktionsweise & Best Practices
  10. C++ Vectors meistern: Dynamische Arrays, Iteratoren & Praxisbeispiele