memcpy-Fehlermeldung (error C2172)



  • Hallo,

    wie kann man bitte eine Struktur in ein Buffer kopieren? Hier ist die Fehlermeldung: error C2172: 'memcpy' : Uebergebener Parameter ist kein Zeiger: Parameter 2

    Danke
    Bahanfar

    typedef struct MY_STRUCT
    {
    	int a;
    	int b;
    }MY_STRUCT;
    
    int main(void) 
    {
    	char buff[128];
    
    	MY_STRUCT my_struct;
    
    	my_struct.a = 12;
    	my_struct.b = 22;
    
    	memcpy(buff,my_struct,sizeof(MY_STRUCT));
    
    	printf("Output: %s",buff);
    
    	return 1;
    }
    


  • Du mußt die Adresse des Quell- und Zielbereiches übergeben - das Array wird implizit in einen Pointer umgewandelt, bei deinem struct mußt du selber den Adress-Operator &my_struct verwenden.



  • CStoll schrieb:

    Du mußt die Adresse des Quell- und Zielbereiches übergeben - das Array wird implizit in einen Pointer umgewandelt, bei deinem struct mußt du selber den Adress-Operator &my_struct verwenden.

    Danke. Das funktioniert. Was ist bitte bei printf() falsch, dass der buff-Inhalt nicht ausgegeben wird?



  • Du versuchst eine Struktur als String zu behandeln. Das kann nicht gutgehen (ausser deine Strukt kapselt als erstes Element einen String, was hier nicht der Fall ist).



  • Hi,

    wenn man mal den Sinn (oder Unsinn) deiner Funktion beiseite läßt,
    will ich dir hier mal eine Erklärung für deinen Output geben:

    printf("%s", string);
    

    An dieser Stelle wird ein String erwartet, welcher mit dem Zeichen
    '\0' (= 0) beendet ist.

    Wenn man sich mal anschaut, wie dein Struct im Speicher liegt
    (dafür ist dein memcpy hilfreich, es hätte aber auch ein einfacher
    cast getan) sieht es so aus:

    0c 00 00 00 16 00 00 00
    

    Zur Erklärung: Dein Strukt ist 8 byte groß. Jedes Byte wird hier
    hexadezimal mit zwei Zeichen dargestellt.

    Schon das zweite Zeichen ist Null ('\0'), somit gibt dein Programm
    nichts aus, da 0c kein darstellbares Zeichen ist (FF = Formfeed, oder so).

    Hier mal eine abgewandelte Ausgabe:

    printf("Output: size: %d  ", sizeof(MY_STRUCT));
        for (i=0; i<sizeof(MY_STRUCT); ++i) printf("%02x",buff[i]);
        printf("\n");
        printf("a: %02x   b: %02x \n", my_struct.a, my_struct.b);
        printf("a: %02d   b: %02d \n", my_struct.a, my_struct.b);
    

    Gruß mcr


Anmelden zum Antworten