Я могу «упаковать» массивы длинной строки. Теперь, если я memcpy строку, содержащую массивы длинные, содержимое теряется. Здесь у вас есть мой код:Копирование строк с длинными
#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)));
}
}
И это выход:
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
Как вы можете видеть, я могу читать длинные значения, которые я сделал в магазине «аранжировка», но не из " arr2" . Любая подсказка?
'я * SizeOf (длинный)' -> 'i' – BLUEPIXY
' (long *) arr2 + i * sizeof (long) 'приведет к неопределенному поведению из-за отсутствия доступа к буферу. '(long *) arr2 + i' уже индексируется в' sizeof (long) ' – StoryTeller
Спасибо ** все ** за ваши ответы и комментарии. К сожалению, я могу принять только один из них ... – mauro