假设我有一个简单的结构,例如:
struct myStruct {
uint8_t arr[10];
};
我希望能够做的就是修改该数组的内容。但是,似乎我不能直接分配数组(即,我不能做像pointerToThisStruct-> arr = anArrayofSizeTen)。
所以这是我的主要方法:
int main(int argc, char **argv) {
uint8_t test[10] = {0};
myStruct *struc;
struc->arr = test; //can't do this
memcpy(struc->arr, test, sizeof(test));
}
现在,我知道直接复制不起作用,但为什么memcpy也给我一个段错误?我究竟应该如何修改struct数组呢?
答案 0 :(得分:5)
您需要申报实际的myStruct
。不是一个指针。声明指向1的指针实际上并不为结构分配任何内存。
#include <stdio.h>
#include <stdint.h>
#include <string.h>
struct myStruct {
uint8_t arr[10];
};
int main(int argc, char **argv) {
int i;
uint8_t test[10] = {0,1,2,3,4,5,6,7,8,9};
struct myStruct struc;
memcpy(struc.arr, test, sizeof(struc.arr));
printf("struc.arr[] = ");
for( i=0; i < sizeof(test); i++ )
{
printf("%d ", struc.arr[i]);
}
printf("\n");
return( 0 );
}
答案 1 :(得分:0)
您遇到分段错误,因为您没有分配结构指针。
int main(int argc, char **argv) {
uint8_t test[10] = {0};
struct myStruct *struct = malloc(sizeof(struct myStruct));
if (!struc)
return -1;
memcpy(struc->arr, test, sizeof(test));
free(struc);
return 0;
}
但是,正如@Chimera所提到的,你完全不能使用一个点并直接使用堆分配的结构,并使用.
运算符访问其内部字段