C-Programmierung

So verwenden Sie Strcpy() in der Sprache C?

So verwenden Sie Strcpy() in der Sprache C?
In diesem Artikel lernen wir die Funktion strcpy() in der Programmiersprache C kennen. Die Funktion strcpy() ist eine sehr beliebte Standardbibliotheksfunktion, um den String-Kopiervorgang in der Programmiersprache C auszuführen. Es gibt mehrere Standard-Header-Dateien in der Programmiersprache C, um Standardoperationen auszuführen. Die Saite.h“ ist eine dieser Header-Dateien, die mehrere Standardbibliotheksfunktionen zum Ausführen von String-Operationen bereitstellt. Die Funktion „strcpy()“ ist eine der Bibliotheksfunktionen von „string“.h“.

Syntax:

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

strcpy() verstehen:

Der einzige Zweck der Funktion strcpy() besteht darin, einen String von der Quelle zum Ziel zu kopieren. Schauen wir uns nun die obige Syntax der Funktion strcpy() an. Die Funktion strcpy() kann zwei Parameter akzeptieren -

Die Quelle ist hier eine Konstante, um sicherzustellen, dass die Funktion strcpy() den Quellstring nicht ändern kann. Die Funktion strcpy() kopiert alle Zeichen (einschließlich des NULL-Zeichens am Ende des Strings) vom Quellstring zum Ziel. Sobald der Kopiervorgang von der Quelle zum Ziel abgeschlossen ist, gibt die Funktion strcpy() die Adresse des Ziels an die Aufruferfunktion zurück.

Der wichtige Punkt, den Sie hier beachten sollten, ist, dass die Funktion strcpy() den Quellstring nicht mit dem Zielstring anhängt. Es ersetzt vielmehr den Inhalt des Ziels durch den Inhalt des Quellstrings.

Außerdem führt die Funktion strcpy() keine Überprüfungen durch, um sicherzustellen, dass die Größe des Ziels größer als der Quellstring ist, es liegt vollständig in der Verantwortung des Programmierers.

Beispiele:

Nun werden wir mehrere Beispiele sehen, um die Funktion 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):

Dieses Beispielprogramm zeigt, wie Sie mit der Funktion strcpy() in der Programmiersprache C einen normalen String-Kopiervorgang ausführen. Bitte beachten Sie, dass die Länge des Ziel-Strings 30 (char destination_str[30]; ) ist, was größer ist als die Länge des Quell-Strings (Länge ist 18 inklusive NULL-Zeichen), damit das Ziel alle Zeichen aus dem Quellstring.

#einschließen
#einschließen
int main()

char source_str[] = "www.linuxhint.com";
char destination_str[30];
printf("Bevor die Funktion strcpy() aufgerufen wird: \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
strcpy(destination_str, source_str);
printf("Nach Ausführung der Funktion strcpy(): \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
0 zurückgeben;

strcpy() - Fall-1 (Beispiel2.c):

Die Absicht dieses Beispielprogramms ist es, klar zu erklären, was passiert, wenn die Länge des Ziel-Strings kleiner ist als die Länge des Quell-Strings. In solchen Fällen verfügt der Zielspeicherort nicht über genügend Leerzeichen/Bytes, um alle Zeichen (einschließlich NULL-Zeichen) aus der Quellzeichenfolge aufzunehmen. Zwei Dinge sollten Sie immer im Hinterkopf behalten:

  1. Die Funktion strcpy() überprüft nicht, ob das Ziel genügend Speicherplatz hat.
  2. Dies kann in eingebetteter Software gefährlich sein, da strcpy() den Speicherbereich jenseits der Grenze des Ziels ersetzt.

Schauen wir uns das Beispielprogramm an. Wir haben source_str deklariert und mit „www“ initialisiert.linuxhint.com“, die zum Speichern 18 Bytes im Speicher benötigt, einschließlich des Null-Zeichens am Ende der Zeichenfolge. Dann haben wir ein weiteres Zeichenarray deklariert i.e. destination_str mit der Größe von nur 5. Der destination_str kann also den Quellstring mit einer Gesamtgröße von 18 Byte nicht aufnehmen.

Trotzdem rufen wir die Funktion strcpy() auf, um den Quellstring in den Zielstring zu kopieren. Aus der folgenden Ausgabe können wir sehen, dass sich strcpy() überhaupt nicht beschwert hat. In diesem Fall beginnt die Funktion strcpy() mit dem Kopieren des Zeichens aus der Quellzeichenfolge (bis sie das NULL-Zeichen in der Quellzeichenfolge findet) an die Zieladresse (auch wenn die Zielgrenze überschritten wird). Das bedeutet, dass die Funktion strcpy() keine Grenzüberprüfung für das Zielarray durchführt. Schließlich überschreibt die Funktion strcpy() die Speicheradressen, die dem Zielarray nicht zugewiesen sind. Aus diesem Grund überschreibt die Funktion strcpy() am Ende die Speicherorte, die einer anderen Variablen zugewiesen werden könnten.

In diesem Beispiel können wir aus der folgenden Ausgabe sehen, dass die Funktion strcpy() den Quellstring selbst überschreibt. Programmierer sollten mit solchem ​​Verhalten immer vorsichtig sein.

#einschließen
#einschließen
int main()

char source_str[] = "www.linuxhint.com";
char Ziel_str[5];
printf("Bevor die Funktion strcpy() aufgerufen wird: \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
strcpy(destination_str, source_str);
printf("Nach Ausführung der Funktion strcpy(): \n\n");
printf("\tQuellstring = %s\n", source_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]);
0 zurückgeben;

strcpy() - Fall-2 (Beispiel3.c):

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

  • source_str zu „www.linuxhint.com“ [Größe = 17+1 = 18]
  • destination_str zu „I_AM_A_DESTINATION_STRING“ [Größe = 25+1 = 26]

Die Funktion strcpy() kopiert alle 17 Zeichen und das NULL-Zeichen aus dem Quellstring in den Zielstring. Die verbleibenden Bytes (Byte 19 bis 26, eines basierend) im Zielarray werden jedoch nicht ersetzt / geändert. Wir haben eine for-Schleife verwendet, um über das Zielarray zu iterieren und das gesamte Array auszugeben, um zu beweisen, dass die Bytes-19 bis 26 im Zielarray unverändert sind unchanged. Deshalb sehen wir die letzte Ausgabe als:

„www.linuxhint.com_STRING”.

#einschließen
#einschließen
/* Dieses Programm veranschaulicht die Situation, wenn:
Ziel-String-Größe > Quell-String-Größe
und wir führen die Funktion strcpy() aus, um die . zu kopieren
Quellstring zum Ziel.
Hinweis: Die Größe der Zielzeichenfolge sollte immer
größer oder gleich der Quellzeichenfolge sein.
*/
int main()

char source_str[] = "www.linuxhint.com";
char destination_str[26] = "I_AM_A_DESTINATION_STRING";
printf("Bevor die Funktion strcpy() aufgerufen wird: \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
strcpy(destination_str, source_str);
printf("Nach Ausführung der Funktion strcpy(): \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
/* Zielstring mit for-Schleife ausgeben*/
printf("Den Zielstring char für char ausgeben: \n\n");
printf("\tDestination String = ");
for(int i=0; i<25;i++)

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

printf("\n\n");
0 zurückgeben;

strcpy() - Fall-3 (Beispiel4.c):

Wir haben dieses Programm als Beispiel betrachtet, um zu zeigen, dass wir strcpy() niemals mit einem String-Literal als Ziel aufrufen sollten. Dies führt zu undefiniertem Verhalten und schließlich stürzt das Programm ab.

#einschließen
#einschließen
int main()

char source_str[] = "www.linuxhint.com";
printf("Bevor die Funktion strcpy() aufgerufen wird: \n\n");
printf("\tQuellstring = %s\n", source_str);
/* Rufe niemals strcpy() mit einem String-Literal als Ziel auf.
Das Programm stürzt ab.
*/
strcpy("destination_str", source_str);
printf("Nach Ausführung der Funktion strcpy(): \n\n");
printf("\tQuellstring = %s\n", source_str);
0 zurückgeben;

strcpy() - Benutzerdefinierte Version (Beispiel5.c):

In diesem Beispielprogramm haben wir gezeigt, wie man eine benutzerdefinierte Version der Funktion strcpy() schreibt write.

#einschließen
char * strcpy_user_defined(char *dest, const char * src);
/* Benutzerdefinierte Version der Funktion strcpy() */
char * strcpy_user_defined(char *dest, const char * src)

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

*Ziel = *src; /* Quellzeichen zum Ziel kopieren */
src++; /* Quellzeiger inkrementieren */
dest++; /* Zielzeiger inkrementieren */

*Ziel = '\0'; /* Füge '\0' explizit in das Ziel ein*/
Rückkehr dest_backup;

int main()

char source_str[] = "www.linuxhint.com";
char destination_str[30];
printf("Bevor die benutzerdefinierte Zeichenfolgenkopierfunktion aufgerufen wird: \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
/* Aufruf einer benutzerdefinierten String-Kopierfunktion */
strcpy_user_defined(destination_str, source_str);
printf("Nach Ausführung der benutzerdefinierten Zeichenfolgenkopierfunktion: \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
0 zurückgeben;

strcpy() - Benutzerdefinierte Version optimiert (Beispiel6.c):

In diesem Beispielprogramm optimieren wir nun die benutzerdefinierte Version von strcpy().

#einschließen
char * strcpy_user_defined(char *dest, const char * src);
/* Optimierte Version der benutzerdefinierten Funktion strcpy() */
char * strcpy_user_defined(char *dest, const char * src)

char * dest_backup = dest;
while(*dest++ = *src++)
;
Rückkehr dest_backup;

int main()

char source_str[] = "www.linuxhint.com";
char destination_str[30];
printf("Bevor die benutzerdefinierte Zeichenfolgenkopierfunktion aufgerufen wird: \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
/* Aufruf einer benutzerdefinierten String-Kopierfunktion */
strcpy_user_defined(destination_str, source_str);
printf("Nach Ausführung der benutzerdefinierten Zeichenfolgenkopierfunktion: \n\n");
printf("\tQuellstring = %s\n", source_str);
printf("\tDestination String = %s\n\n", destination_str);
0 zurückgeben;

Fazit:

Die Funktion strcpy() ist eine sehr beliebte und praktische Bibliotheksfunktion, um den String-Kopiervorgang in der Programmiersprache C auszuführen. Dies wird hauptsächlich verwendet, um die Zeichenfolge von einem Ort an einen anderen Ort zu kopieren. Wir möchten jedoch noch einmal auf die Tatsache hinweisen, dass die Funktion strcpy() keine Grenzüberprüfung für das Zielarray durchführt, was bei Nichtbeachtung zu einem schwerwiegenden Softwarefehler führen könnte. Es liegt immer in der Verantwortung des Programmierers, sicherzustellen, dass das Zielarray genügend Platz hat, um alle Zeichen aus der Quellzeichenfolge einschließlich des NULL-Zeichens aufzunehmen.

Unicornscan Ein Anfängerleitfaden
Port-Scanning ist eine der beliebtesten Taktiken von Blackhat-Hackern. Folglich wird es auch im Ethical Hacking häufig verwendet, um Systeme auf Schwa...
Was ist ein Zero-Day-Exploit??
Ein Zero-Day-Exploit ist der Kronpreis der Hacker. Bei einem Zero-Day-Exploit findet ein Angreifer eine Schwachstelle auf einem System, die dem Anbiet...
ARP-Spoofing mit einem Man-in-the-Middle-Angriff
Ausführen von Man-In-The-Middle-Angriffen mit Kali Linux Man-in-the-Middle-Angriffe gehören zu den am häufigsten versuchten Angriffen auf Netzwerkrout...