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 destinationDie 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.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das das Kopieren von Strings mit der Funktion strcpy() demonstriert. Ihr Programm sollte:
- Einen Ganzzahlwert
neinlesen, der die Anzahl der auszuführenden String-Operationen darstellt - Für jede Operation:
- Einen Quell-String (source string) von der Eingabe einlesen
- Ein Zeichenarray namens
destinationmit 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
- Nach allen Operationen demonstrieren, dass die kopierten Strings unabhängig sind, indem Sie:
- Das erste Zeichen des letzten
destinationArrays in 'X' ändern - Den geänderten Ziel-String ausgeben, um zu zeigen, dass er sich geändert hat
- Das erste Zeichen des letzten
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
programmingSollte Ihre Ausgabe wie folgt aussehen:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: XrogrammingDiese 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 destinationDie 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;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-Funktionen