So verwenden Sie STRCPY in C -Sprache?

So verwenden Sie STRCPY in C -Sprache?
In diesem Artikel erfahren wir die Funktion von Strcpy () in der C -Programmiersprache C. Die Funktion von Strcpy () ist eine sehr beliebte Standardbibliotheksfunktion, um den Vorgang der String -Kopie in der C -Programmiersprache C durchzuführen. Es gibt mehrere Standard -Header -Dateien in der C -Programmiersprache, um Standardvorgänge auszuführen. Die Saite.H ”ist eine dieser Header -Dateien, die mehrere Standardbibliotheksfunktionen zur Durchführung von String -Operationen bereitstellt. Die Funktion „Strcpy ()“ ist eine der Bibliotheksfunktionen, die von "String" bereitgestellt werden.H".

Syntax:

char* strcpy (char* destination_location, const char* source_string);

Verständnis von Strcpy ():

Der einzige Zweck der Funktion von Strcpy () besteht darin, eine Zeichenfolge von der Quelle zum Ziel zu kopieren. Lassen Sie uns nun die obige Syntax von Strcpy () -Funktion ansehen. Die Funktion von Strcpy () kann zwei Parameter akzeptieren -

  • char * Ziel
  • const char * Quelle

Die Quelle ist hier eine Konstante, um sicherzustellen, dass die Funktion von Strcpy () die Quellzeichenfolge nicht ändern kann. Die Funktion von Strcpy () kopiert alle Zeichen (einschließlich des Nullzeichen am Ende der Zeichenfolge) von der Quellzeichenfolge zum Ziel. Sobald die Kopieroperation von Quelle zu Ziel abgeschlossen ist.

Der wichtige Punkt, der hier zu bemerken ist, ist, dass die Funktion von Strcpy () die Quellzeichenfolge nicht mit der Zielzeichenfolge angehängt hat. Es ersetzt eher den Inhalt des Ziels durch den Inhalt der Quellzeichenfolge.

Außerdem führt die Funktion von Strcpy () keine Überprüfungen durch, um sicherzustellen, dass die Größe des Ziels mehr als die Quellzeichenfolge ist. Es liegt vollständig in der Verantwortung des Programmierers.

Beispiele:

Jetzt werden wir mehrere Beispiele sehen, um die Funktion von Strcpy () zu verstehen:

  1. STRCPY () - Normaler Betrieb (Beispiel1.C)
  2. Strcpy () - Fall -1 (Beispiel2.C)
  3. Strcpy () - Fall -2 (Beispiel3.C)
  4. Strcpy () - Fall -3 (Beispiel4).C)
  5. Strcpy () - Benutzerdefinierte Version (Beispiel5.C)
  6. STRCPY () - Benutzerdefinierte Version optimiert (Beispiel6.C)

STRCPY () - Normaler Betrieb (Beispiel1.C):

In diesem Beispiel wird angezeigt, wie eine normale String -Kopieroperation unter Verwendung der Funktion von Strcpy () in der C -Programmiersprache C. Bitte beachten Sie, dass die Länge der Zielzeichenfolge 30 beträgt (char destination_str [30];), was größer ist als die Länge der Quellzeichenfolge (Länge 18 ist das Nullzeichen), damit das Ziel alle Zeichen aus dem aufnehmen kann Quellzeichenfolge.

#enthalten
#enthalten
int main ()

char Source_str [] = "www.LinuxHint.com ";
char destination_str [30];
printf ("Vor dem Aufrufen von strcpy () Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
STRCPY (Destination_str, Source_str);
printf ("Nach Ausführung von strcpy () Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
Rückkehr 0;

Strcpy () - Fall -1 (Beispiel2.C):

Die Absicht dieses Beispielprogramms besteht darin, klar zu erklären, was passiert, wenn die Länge der Zielzeichenfolge geringer ist als die Länge der Quellzeichenfolge. In solchen Fällen hat der Zielort nicht genügend Leerzeichen/Bytes, um alle Zeichen (einschließlich Nullzeichen) aus der Quellzeichenfolge aufzunehmen. Zwei Dinge, Sie sollten immer im Auge behalten:

  1. Die Funktion von Strcpy () prüft nicht, ob das Ziel genügend Speicherplatz hat.
  2. Dies könnte in der eingebetteten Software gefährlich sein, da die STRCPY () den Speicherbereich über die Grenze des Ziels hinaus ersetzt.

Schauen wir uns das Beispielprogramm an. Wir haben Source_str deklariert und auf „www initialisiert“.LinuxHint.com ”, das 18 Bytes im Speicher zum Speichern benötigt, einschließlich des Null -Zeichens am Ende der Saite. Dann haben wir ein weiteres Charakter -Array i deklariert i.e. destination_str mit der Größe von nur 5. Daher kann das Destination_str die Quellzeichenfolge nicht mit einer Gesamtgröße von 18 Bytes halten.

Trotzdem rufen wir die Funktion von Strcpy () auf, um die Quellzeichenfolge in die Zielzeichenfolge zu kopieren. Aus der folgenden Ausgabe können wir sehen, dass sich die Strcpy () überhaupt nicht beschwert hat. In diesem Fall wird die Funktion von Strcpy () das Zeichen aus der Quellzeichenfolge (bis sie das Nullzeichen in der Quellzeichenfolge findet) an die Zieladresse (obwohl die Zielgrenze überschreitet) kopiert. Das heißt. Schließlich überschreibt die Funktion von Strcpy () die Speicheradressen, die dem Zielarray nicht zugewiesen werden. Aus diesem Grund überschreiben die Funktion von Strcpy () die Speicherorte, die einer anderen Variablen zugeordnet werden könnten.

In diesem Beispiel können wir aus der folgenden Ausgabe sehen, dass die Funktion von Strcpy () die Quellzeichenfolge selbst überschreibt. Programmierer sollten immer vorsichtig mit einem solchen Verhalten sein.

#enthalten
#enthalten
int main ()

char Source_str [] = "www.LinuxHint.com ";
char destination_str [5];
printf ("Vor dem Aufrufen von strcpy () Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
STRCPY (Destination_str, Source_str);
printf ("Nach Ausführung von strcpy () Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
// printf ("Quelladresse = %u (0x %x) \ n", & source_str [0], & source_str [0]);
// printf ("Zieladresse = %u (0x %x) \ n", & destination_str [0], & destination_str [0]);
Rückkehr 0;

Strcpy () - Fall -2 (Beispiel3.C):

Dieses Programm veranschaulicht die Situation, in der die Größe der Zielzeichenfolge größer ist als die Größe der Quellzeichenfolge und die Zielzeichenfolge bereits mit einem gewissen Wert initialisiert wird. In diesem Beispiel haben wir initialisiert:

  • Source_str zu “www.LinuxHint.com ”[size = 17+1 = 18]
  • Destination_str zu "i_am_a_destination_string" [size = 25+1 = 26]

Die Funktion von Strcpy () kopiert alle 17 Zeichen und das Nullzeichen aus der Quellzeichenfolge in die Zielzeichenfolge. Es wird jedoch nicht die verbleibenden Bytes (Byte 19 bis 26, eine basierende) im Zielarray ersetzen/ändern. Wir haben für die Schleife über das Ziel-Array verwendet und das gesamte Array gedruckt, um zu beweisen, dass die Bytes-19 bis 26 im Ziel-Array unverändert sind. Deshalb sehen wir die letzte Ausgabe als:

„Www.LinuxHint.com_string ”.

#enthalten
#enthalten
/* Dieses Programm zeigt die Situation, wenn:
Zielzeichenfolge Größe> Quellzeichenfolge Größe
und wir führen die Funktion von Strcpy () aus, um die zu kopieren
Quellzeichenfolge zum Ziel.
HINWEIS: Die Ziellreichsgröße sollte immer
Seien Sie größer als oder gleich der Quellzeichenfolge.
*/
int main ()

char Source_str [] = "www.LinuxHint.com ";
char destination_str [26] = "i_am_a_destination_string";
printf ("Vor dem Aufrufen von strcpy () Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
STRCPY (Destination_str, Source_str);
printf ("Nach Ausführung von strcpy () Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
/* Ziellreich drucken Sie für Schleife*/
printf ("Drucken Sie die Zielzeichenfolge char von char: \ n \ n");
printf ("\ tdestination String =");
für (int i = 0; i<25;i++)

printf ("%c", destination_str [i]);

printf ("\ n \ n");
Rückkehr 0;

Strcpy () - Fall -3 (Beispiel4).C):

Wir haben dieses Programm als Beispiel betrachtet, um zu zeigen, dass wir niemals Strcpy () mit einem String -Literal als Ziel nennen sollten. Dies führt zu undefiniertem Verhalten und schließlich wird das Programm zum Absturz gebracht.

#enthalten
#enthalten
int main ()

char Source_str [] = "www.LinuxHint.com ";
printf ("Vor dem Aufrufen von strcpy () Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
/* Rufen Sie niemals Strcpy () mit String Literal als Ziel an.
Das Programm wird abstürzen.
*/
strcpy ("destination_str", socal_str);
printf ("Nach Ausführung von strcpy () Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
Rückkehr 0;

Strcpy () - Benutzerdefinierte Version (Beispiel5.C):

In diesem Beispielprogramm haben wir gezeigt, wie Sie eine benutzerdefinierte Version der Funktion von Strcpy () schreiben können.

#enthalten
char * strcpy_user_defined (char * dest, const char * src);
/ * Benutzerdefinierte Version von Strcpy () Funktion */
char * strcpy_user_defined (char * dest, const char * src)

char * dest_backup = dest;
while (*src != '\ 0') /* iterieren, bis '\ 0' gefunden wurde.*/

*dest = *src; / * Kopie der Quelle zum Ziel kopieren */
src ++; / * Inkrement -Quellzeiger *//
dest ++; / * Inkrementzielzeiger *//

*dest = '\ 0'; /* '\ 0' in das Ziel explizit*/einfügen*/
return dest_backup;

int main ()

char Source_str [] = "www.LinuxHint.com ";
char destination_str [30];
printf ("Vor dem Aufrufen von Benutzerndefined String Copy -Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
/ * Aufrufen von Benutzerfunktionen für die definierte Zeichenfolge *// *
STRCPY_USER_DEFINED (Destination_str, Source_Str);
printf ("Nach der Ausführung von Benutzerndefined String Copy -Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
Rückkehr 0;

STRCPY () - Benutzerdefinierte Version optimiert (Beispiel6.C):

In diesem Beispielprogramm werden wir nun die benutzerdefinierte Version von Strcpy () optimieren, um zu optimieren.

#enthalten
char * strcpy_user_defined (char * dest, const char * src);
/ * Optimierte Version der benutzerdefinierten Strcpy () -Funktion *//
char * strcpy_user_defined (char * dest, const char * src)

char * dest_backup = dest;
while ( *dest ++ = *src ++)
;
return dest_backup;

int main ()

char Source_str [] = "www.LinuxHint.com ";
char destination_str [30];
printf ("Vor dem Aufrufen von Benutzerndefined String Copy -Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
/ * Aufrufen von Benutzerfunktionen für die definierte Zeichenfolge *// *
STRCPY_USER_DEFINED (Destination_str, Source_Str);
printf ("Nach der Ausführung von Benutzerndefined String Copy -Funktion: \ n \ n");
printf ("\ tSource string = %s \ n", socal_str);
printf ("\ tdestination string = %s \ n \ n", destination_str);
Rückkehr 0;

Abschluss:

Die Funktion von Strcpy () ist eine sehr beliebte und praktische Bibliotheksfunktion, um den Kopiervorgang in der C -Programmiersprache C durchzuführen. Dies wird hauptsächlich verwendet, um die Zeichenfolge von einem Ort an einen anderen Ort zu kopieren. Wir möchten jedoch die Tatsache wiederholen, dass die Funktion der Strcpy () nicht die Grenzüberprüfung für das Ziel -Array durchführt, was zu einem schwerwiegenden Softwarefehler führen könnte. Es liegt immer in der Verantwortung des Programmierers, sicherzustellen.