memcpy
-
Hi
Warum funktioniert der gekennzeichnete Code nur in the Release Version der Anwendung, verursacht jedoch im Debug Build einen Error?
Wie kann ich dieses Problem lösen?#include <windows.h> char* func(char *ch) { char car[8]= { 0, 0, 0, 0, 0, 0, 0, 0 }; memcpy(ch, car, 8); // ERROR ch[8] = 0; // ERROR return ch; } int main(int argc, char* argv[]) { func("test"); return 0; }
-
Weils schlichtweg falsch is was du da machst:
func( const char *ch )Es muss (und wird) ein Zeiger auf eine Konstanze übergeben, da gibts nix zu ändern! Und beim zweiten Fehler versuchst du einfach über den vorhandenen Bereich zu schreiben.
grüße
-
Ah ok. Wie würde dann die Lösung dieses Problems aussehen?
-
Ich seh kein Problem, daher gibts auch keine Lösung dafür. Das was du machen willst ist falsch!
grüße
-
Das erste Problem ist, dass "test" eine Konstante ist. Dh, dieser Speicher darf nicht überschrieben werden. Lösung: erstelle eine Kopie.
char test[...] = "test"; func(test);Das zweite Problem ist, dass du in func() auf das neunte Element von ch zugreifst. ch hat aber nur 5 (4 + 1 abschliessendes Nullzeichen) Elemente, welche, wie bereits erwähnt, auch noch schreibgeschützt sind. Lösung: erstelle ch mit ausreichend Speicherplatz.
char test[9] = "test";
-
groovemaster schrieb:
Das erste Problem ist, dass "test" eine Konstante ist. Dh, dieser Speicher darf nicht überschrieben werden. Lösung: erstelle eine Kopie.
char test[...] = "test"; func(test);Das zweite Problem ist, dass du in func() auf das neunte Element von ch zugreifst. ch hat aber nur 5 (4 + 1 abschliessendes Nullzeichen) Elemente, welche, wie bereits erwähnt, auch noch schreibgeschützt sind. Lösung: erstelle ch mit ausreichend Speicherplatz.
char test[9] = "test";Naja, doppelt gemoppelt hält besser, oder?

-
Danke sehr.