Was ist der signifikante Unterschied zwischen memcpy()
und strncpy()
? Ich frage das, weil wir einfach strncpy()
ändern können, um irgendeinen Typ von Daten zu kopieren, nicht nur Zeichen, einfach indem wir die ersten zwei nicht char*
Argumente auf char*
umwandeln und das dritte Argument als ein Vielfaches der Größe dieses Nicht-Zeichens verändern Art. Im folgenden Programm habe ich erfolgreich das verwendet, um einen Teil eines Integer-Arrays in ein anderes zu kopieren, und es funktioniert so gut wie memcpy()
.Was ist der Unterschied zwischen memcpy() und strncpy(), letzteres kann leicht ein Ersatz für den ersten sein?
#include <stdio.h>
#include <string.h>
int main()
{
int arr[2]={20,30},brr[2]={33,44};
//memcpy(arr,brr,sizeof(int)*1);
strncpy((char*)arr,(char*)brr,sizeof(int)*1);
printf("%d,%d",arr[0],arr[1]);
}
In ähnlicher Weise können wir es für float
oder anderen Datentyp zu arbeiten. Was ist der wesentliche Unterschied zu memcpy()
?
PS: Außerdem frage ich mich, warum memcpy()
in string.h
Header-Datei ist, da fast alle Bibliotheksfunktionen gegeben sind Zeichenketten zusammen, während memcpy()
allgemeinerer Natur ist. Irgendein Grund?
Ich googelte dafür, aber die einzige Frage, die es ähnelt, ist http://stackoverflow.com/questions/4593907/difference-between-strncpy-and-memcpy, aber es beantwortet nicht, was ich hier zu fragen beabsichtige . – Thokchom
memcopy kopiert unbedingt, bis es fertig ist, aber viele Bytes, die Sie wollten. strncpy kopiert so lange, bis ein NULL-Wert (string terminator) erreicht wird oder "n" Bytes kopiert werden. Daher können Sie strncpy nicht für beliebige Binärdaten verwenden, da solche Daten natürlicherweise Nullwerte enthalten können. –
[Verwandte Frage] (http://stackoverflow.com/questions/6509449/is-strncpy-a-specialization-of-memcpy). – Dukeling