Kleine Frage zu memcpy
-
Ich möchte in Intervalen etwas in eine Variable ablegen
memcpy(&variable[i*10],&text[0],10);
Meine Frage ist jetzt eigentlich nur, was passiert wenn text kleiner 10 Zeichen lang ist. Wird der Rest mit "Müll" belegt oder sauber mit '0' bzw garnicht angefasst?
Da jeder Compiler etwas anders arbeitet, wollte ich nur mal fragen wie das "original" zu verstehen wäre. Oder sollte man es genrell so machen:
memcpy(&variable[i*10],&text[0],strlen(text));
dann müsste ich allerdings vorher eine Abfrage machen, das text nicht länger 10 Zeichen sein darf.
Über eine Antwort würd ich mich freuen
-
memcpy() kopiert soviel bytes wie du sagst. Wenn hinter der '\0' noch Müll kommt, wird der mitkopiert. Wenn hinter der '\0' noch Speicher kommt den du nicht anfassen darfst, krachts.
memcpy(&variable[i*10],&text[0],strlen(text));
Schau dir mal strcpy() bzw. strncpy() an
-
Also darf man niemals mehr kopieren wollen als die Variable gross ist?!
Zu meinem Verständnis möchte ich mal Beispiel nennen:
char text[20];
1. Eingabe in text strcpy(text,"1234567890");
anschliessend gleich 2. Eingabe strcpy(text,"abc");, dann würde er bei memcpy mit 10 diesen text "abc0567890" in die variable kopieren?Noch schlimmer würde es wohl bei string, sprich dynamischen Textlängen.
Gut das ich das jetzt weiss..
-
Gerdi schrieb:
Also darf man niemals mehr kopieren wollen als die Variable gross ist?!
Du darfst soviel kopieren wie du lustig bist. Solange dir der Speicher "gehört", passiert nix schlimmes ausser dass du etwas Rechenzeit verschwendest.
Gerdi schrieb:
Zu meinem Verständnis möchte ich mal Beispiel nennen:
char text[20];
1. Eingabe in text strcpy(text,"1234567890");
anschliessend gleich 2. Eingabe strcpy(text,"abc");, dann würde er bei memcpy mit 10 diesen text "abc0567890" in die variable kopieren?Noch schlimmer würde es wohl bei string, sprich dynamischen Textlängen.
Gut das ich das jetzt weiss..Ja, es würde den Rest hinter der '\0' mitkopieren ("abc0567890" ist nicht ganz korrekt dargestellt... aber man sieht was du meinst).
-
danke! :xmas2:
-
Gerdi schrieb:
1. Eingabe in text strcpy(text,"1234567890");
anschliessend gleich 2. Eingabe strcpy(text,"abc");, dann würde er bei memcpy mit 10 diesen text "abc0567890" in die variable kopieren?meinst du jetzt sowas?
char text[20]; strcpy(text,"1234567890"); strcpy(text,"abc");
In diesem Fall speichert text "abc", denn strcpy kopiert das \0 Zeichen
-
supertux schrieb:
In diesem Fall speichert text "abc", denn strcpy kopiert das \0 Zeichen
Genau genommen steht dort
"abc\0567890\0..."
(das letzte ist irgendwelcher Datenmüll, den der Rechner beim Anlegen des Arrays liegengelassen hat), aber das die String-Verarbeitung von C die \0 als Endemarke verwendet, siehst du nur das "abc".