Ich bin in der Lage, lange Arrays in Strings zu "packen". Jetzt, wenn ich die Zeichenfolge mit langen Arrays memcpy, der Inhalt ist verloren. Hier haben Sie meinen Code:Strings mit Longs kopieren
#include <stdio.h>
#include <string.h>
int main()
{
unsigned char arr[40];
unsigned char arr2[40];
unsigned int i = 0 ;
long f=0;
for (i = 0 ; i < 5 ; i++) {
f = i + 1 ;
*((long *)arr + i*sizeof(long)) = f ;
}
memcpy(arr2, arr, 40);
for (i = 0 ; i < 5 ; i++) {
f = *((long *)arr2 + i*sizeof(long)) ;
printf("f =%ld from arr2 sizeof %zu\n", f, (size_t)(i*sizeof(long)));
}
for (i = 0 ; i < 5 ; i++) {
f = *((long *)arr + i*sizeof(long)) ;
printf("f =%ld from arr sizeof %zu\n", f, (size_t)(i*sizeof(long)));
}
}
Und dies ist die Ausgabe:
f =1 from arr2 sizeof 0
f =0 from arr2 sizeof 8
f =1 from arr2 sizeof 16
f =140734674541394 from arr2 sizeof 24
f =140734674541702 from arr2 sizeof 32
f =1 from arr sizeof 0
f =2 from arr sizeof 8
f =3 from arr sizeof 16
f =4 from arr sizeof 24
f =5 from arr sizeof 32
Wie man sehen kann ich in der Lage bin, die langen Werte lesen Ich habe Speicher in „arr“, aber nicht aus " arr2 ". Irgendeine Ahnung?
'i * sizeof (long)' -> 'I' – BLUEPIXY
' (long *) arr2 + i * sizeof (long) 'führt zu undefiniertem Verhalten aufgrund von Pufferzugriff außerhalb des gültigen Bereichs. '(long *) arr2 + i' indexiert bereits in' sizeof (long) ' – StoryTeller
Danke ** all ** für deine Antworten & Kommentare. Leider kann ich nur einen von ihnen akzeptieren ... – mauro