Menu
Coddy logo textTech

Verwendung von strcpy()

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 16 von 63.

Sie haben gelernt, wie man die Länge von Strings mit strlen() ermittelt, aber was ist, wenn Sie den Inhalt eines Strings in einen anderen kopieren müssen? In C können Sie den Zuweisungsoperator (=) nicht verwenden, um Strings zu kopieren, wie Sie es bei regulären Variablen tun würden.

Der Grund dafür ist, dass Strings Zeichen-Arrays sind, und wenn man = bei Arrays verwendet, kopiert man nur die Speicheradresse, nicht den tatsächlichen Inhalt. Hier wird die strcpy()-Funktion aus der <string.h>-Bibliothek unverzichtbar.

#include <stdio.h>
#include <string.h>

char source[] = "Hello";
char destination[20];
strcpy(destination, source);  // Kopiert "Hello" in destination

Die Funktion strcpy() nimmt zwei Argumente entgegen: das Ziel-Array (dahin, wo Sie kopieren möchten) und den Quell-String (das, was Sie kopieren möchten). Sie kopiert jedes Zeichen von der Quelle zum Ziel, einschließlich des Null-Terminators.

Es ist entscheidend, dass Ihr Ziel-Array groß genug ist, um den gesamten Quell-String einschließlich des Null-Terminators aufzunehmen. Wenn das Ziel zu klein ist, schreibt strcpy() über die Array-Grenzen hinaus, was zu undefiniertem Verhalten führt.

Diese Funktion ist grundlegend für die String-Manipulation in C und ermöglicht es Ihnen, Strings zu duplizieren, String-Variablen mit vorhandenem Inhalt zu initialisieren und Strings für die weitere Verarbeitung vorzubereiten.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das das Kopieren von Strings mit der Funktion strcpy() demonstriert. Ihr Programm sollte:

  1. Einen Ganzzahlwert n einlesen, der die Anzahl der auszuführenden String-Operationen darstellt
  2. Für jede Operation:
    • Einen Quell-String (source string) von der Eingabe einlesen
    • Ein Zeichenarray namens destination mit 100 Elementen deklarieren
    • strcpy() verwenden, um den Quell-String in das Ziel-Array (destination array) zu kopieren
    • Sowohl den ursprünglichen Quell-String als auch den kopierten Ziel-String ausgeben
  3. Nach allen Operationen demonstrieren, dass die kopierten Strings unabhängig sind, indem Sie:
    • Das erste Zeichen des letzten destination Arrays in 'X' ändern
    • Den geänderten Ziel-String ausgeben, um zu zeigen, dass er sich geändert hat

Denken Sie daran, den Header <string.h> einzubinden, um die Funktion strcpy() zu verwenden.

Ihre Ausgabe sollte die Ergebnisse im folgenden Format anzeigen:

Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]

Wenn die Eingabe zum Beispiel wie folgt aussieht:

3
hello
world
programming

Sollte Ihre Ausgabe wie folgt aussehen:

Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: Xrogramming

Diese Herausforderung testet Ihr Verständnis für die Verwendung von strcpy() zum Kopieren von String-Inhalten von einem Zeichenarray in ein anderes, die ordnungsgemäße Speicherbelegung für Ziel-Arrays und demonstriert, dass kopierte Strings unabhängig von ihren Quellen sind.

Spickzettel

Um Strings in C zu kopieren, verwenden Sie strcpy() aus der Bibliothek <string.h>. Sie können den Zuweisungsoperator (=) nicht verwenden, um Strings zu kopieren, da dieser nur Speicheradressen kopiert und nicht den tatsächlichen Inhalt.

#include <stdio.h>
#include <string.h>

char source[] = "Hello";
char destination[20];
strcpy(destination, source);  // Kopiert "Hello" in destination

Die Funktion strcpy() nimmt zwei Argumente entgegen: das Ziel-Array (wohin kopiert werden soll) und den Quell-String (was kopiert werden soll). Sie kopiert jedes Zeichen von der Quelle zum Ziel, einschließlich des Null-Terminators.

Das Ziel-Array muss groß genug sein, um den gesamten Quell-String plus den Null-Terminator aufzunehmen, um undefiniertes Verhalten zu vermeiden.

Probier es selbst

#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    
    char source[100];
    char destination[100];
    
    // TODO: Schreiben Sie Ihren Code hier
    // Verwenden Sie eine Schleife, um n String-Operationen zu verarbeiten
    // Für jede Operation:
    // - Lesen Sie den Quell-String ein
    // - Verwenden Sie strcpy(), um die Quelle in das Ziel zu kopieren
    // - Geben Sie beide Strings im erforderlichen Format aus
    
    // TODO: Ändern Sie nach der Schleife das erste Zeichen des letzten Ziels
    // und geben Sie den geänderten String aus
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow