簡體   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