Was ist der Unterschied zwischen memcpy () und strncpy (), da Letzterer leicht ein Ersatz für Ersteres sein kann?

8

Was ist der signifikante Unterschied zwischen memcpy() und strncpy() ? Ich frage das, weil wir einfach strncpy() ändern können, um beliebige Daten zu kopieren, nicht nur Zeichen, einfach indem wir die ersten zwei nicht char* Argumente auf char* und das dritte Argument als ein Vielfaches von Größe dieses Nicht-Zeichen-Typs. Im folgenden Programm habe ich das erfolgreich benutzt, um Teile eines Integer-Arrays in andere zu kopieren, und es funktioniert so gut wie memcpy() .

%Vor%

Ähnlich können wir es für float oder andere Datentypen arbeiten lassen. Also, was ist der wesentliche Unterschied zu memcpy() ?

PS: Ich frage mich auch, warum memcpy() in string.h header-Datei ist, da fast alle Bibliotheksfunktionen auf Zeichenketten bezogen sind, während memcpy() generischer ist Natur. Irgendein Grund?

    
Thokchom 14.05.2013, 21:36
quelle

3 Antworten

17

Der einfache Unterschied besteht darin, dass memcpy() Daten mit eingebetteten Null-Zeichen kopieren kann (auch bekannt als String-Terminator in C-artigen Strings), während strncpy() nur die maximale Anzahl von Zeichen oder die Zahl kopiert Position des ersten Nullzeichens (und den Rest der Strings mit 0s belegen).

Mit anderen Worten, sie haben zwei sehr unterschiedliche Anwendungsfälle.

    
Timo Geusch 14.05.2013, 21:39
quelle
5

Nehmen Sie zum Beispiel diese Zahlen in Ihrem Array:

%Vor%

Das niederwertigste Byte der ersten Zahl brr[0] ist 0 ( 512 ist 0x200 ), was dazu führt, dass 1) %% aufhört zu kopieren. strncpy kopiert keine Zeichen, die einer Null folgen Zeichen.

1) Um pedantisch zu sein (siehe Kommentare), gilt dies vorausgesetzt, dass die Implementierung strncpy hat.

    
ouah 14.05.2013 21:40
quelle
0

Wenn der Speicherblock kopiert werden muss, ist memcpy nützlich und die Daten in der for-Zeichenfolge strncpy sind aufgrund des natürlichen Vorteils der Zeichenfolge '\ 0' sinnvoll. Andernfalls führen beide nach der Ausführung dasselbe Kopiermuster aus.

    
S.K.Goswami 30.09.2014 09:23
quelle

Tags und Links