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.


Log in to reply