strcpy Funktion
-
Ich brauch eure Hilfe. Wenn ich das CodeStück kompiliere erhalte ich folgende Warnungen. "function really_bad_copy_function returs adress of local variable".
Zudem erhalte ich bei Programmausfährung Speicherzugriffsverletzung.Kann mir da jemand weiterhelfen bzwl Vorschläge einbringen? Danke schonmal im voraus.
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAGIC_CONSTANTS_ARE_BAD 1024 /* * Diese Funktion soll eine Kopie von string_to_copy machen. * Wird schon klappen, oder? */ char* really_bad_copy_function(char *string_to_copy) { char return_string[MAGIC_CONSTANTS_ARE_BAD]; strncpy(return_string, string_to_copy, MAGIC_CONSTANTS_ARE_BAD - 1); return return_string; } int main () { int i = 0; char *a = "Hello World\n", *b; char *c; b = malloc (strlen(a)+1); strcpy(b, a); c = malloc (strlen(a)+1); c = really_bad_copy_function(a); printf("b = %s", *b); printf("c = %s", c); free(b); free(c); return 0; }
-
Lokale Variablen werden ungültig, wenn ihr Gültigkeitsbereich verlassen wird.
Für return_string wäre das beim Beenden der Funktion really_bad_copy_function.Die Speicherzugriffsverletzung kommt wohl von dem * in Zeile 35. Lass den weg.
-
programer1902 schrieb:
"function really_bad_copy_function returs adress of local variable".
Sagt doch schon alles, oder? Lokale Variablen hören auf zu existieren, wenn eine Funktion zurückkehrt. Deshalb hat strcpy auch 2 Parameter.
Zudem erhalte ich bei Programmausfährung Speicherzugriffsverletzung.
Und das ist dann die logische Folge.