繁体   English   中英

如何在C中将数组分配给结构

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM