如何将数组赋值给C

时间:2015-12-09 20:42:12

标签: 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数组呢?

2 个答案:

答案 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所提到的,你完全不能使用一个点并直接使用堆分配的结构,并使用.运算符访问其内部字段