[英]How to assign an array to a struct in C
假设我有一个简单的结构,例如:
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数组?
您需要声明一个实际的myStruct
。 没有一个指针。 声明一个指针实际上并没有为该结构分配任何内存。
#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 );
}
由于未分配结构指针,因此遇到了分段错误。
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所述,您完全不能使用点直接使用堆分配的结构,而不能使用来访问其内部字段.
算子
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.