[英]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.