ZeroMemory und fread
-
nabend!
hab eben was komisches bemerkt ...
datei=fopen("test.txt","rt"); char zeichen[5]; ZeroMemory(zeichen, sizeof(zeichen)); fread(zeichen , 1 ,5 , datei); if (NULL == strcmp(zeichen , "numme")) cout<<zeichen<<endl;
ich öffne meine textdatei, in der steht "nummer 1 2 3 4 ", nur zum test
mein array umfasst 5 elemente.
diese will ich alle löschen, damit nix unsinniges drin steht.
dann les ich aus meiner datei genau 5 zeichen und vergleiche diese. -> der vergleich misslingt.
warum? ... mein versuch: ich lasse ZeroMemory weg und schreibe:strcpy(zeichen, " ");
und siehe da, es klappt.
logische schlußfolgerung: ZeroMemory tut nicht das selbe wie mein strcpy.
weiterer versuch: ich schreibe
ZeroMemory(zeichen, sizeof(zeichen)+1);
und alles funktioniert bestens ....
wieso das ?!
-
Es steht keine 0 an letzter Stelle. fread() schreibt keine 0 und du lässt zwar ZeroMemory überall 0 hinschreiben, aber fread() überschreibt alle 5 felder wieder...
Dein 'Test' mit strcpy erzeugt undefiniertes verhalten, weil du 6 Elemente in das Array schreibst. Die 0 am Ende überlebt zufällig und du hast die erwarteten ergebnisse...
Einfach deine ursprüngliche Version nehmen und das Array um 1 vergrößern.
-
also versteh ich dich richtig, dass ein string immer folgendermaßen zusammengesetzt ist:
buchstaben xy bla bla + 0 ?
nimmt die null also eine "endstellung" ein?
-
SirNoname schrieb:
nimmt die null also eine "endstellung" ein?
Ja.
0 zeigt an, dass der String jetzt aus ist.
"hallo" == {'h', 'a', 'l', 'l', 'o', 0}
-
alles klar, wieder was dazu gelernt
DANKE und schön abend / nacht noch ... ^^
(hab das mit der null schonmal irgendwo gelesen, war mir jetzt nur nicht sicher
)