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
Bahanfartypedef 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