将一个数组分配给struct中的数组

时间:2019-06-04 09:29:44

标签: c arrays struct typedef

我正在尝试将数组分配给typedef结构的一个字段,但我找不到实际的方法。

我已经搜索了这个问题,但是我似乎找到的只是char *数组的答案,这不是我想要的,我只是想将一个数组分配给一个int数组,然后寻找一个无需初始化结构中的所有变量(下面将对其进行初始化,但我只想设置数组变量)的以下代码的实用方法:

SELECT rtrim('100.', '.') FROM dual

请假定稍后再调用config,并且struct和RA都可以访问它。

4 个答案:

答案 0 :(得分:3)

  

RA.array = {1, 2, 3, 4, 5};

memcpy(RA.array, (int[]){1, 2, 3, 4, 5}, sizeof RA.array);
  

RA.array = arr;

memcpy(RA.array, arr, sizeof arr); // better: sizeof RA.array

答案 1 :(得分:1)

您可以使用bpm.InputSamples(sampleBuffer, numSamples);,如另一个答案所示。或者,使用复合文字形式的临时变量复制整个结构而不是仅复制数组:

memcpy

这是可能的,因为尽管C不允许在运行时分配数组,但它确实允许结构。

答案 2 :(得分:1)

您可以使用memcpy,如另一个答案中所示,或复制整个结构,如另一个答案中所示(尽管您的问题表明您只想设置数组,而不是其余结构)。 / p>

另一个选择是将数组仅嵌入到另一个结构中:

typedef struct {
    int elem[5];
} RotArr;

typedef struct {
    RotArr arr;
    int number;
} Rot;

然后,您可以i的身份访问Rot RA中数组的元素RA.arr.elem[i]。另外,您可以将值分配给整个RotArr对象。您代码的其余部分可能看起来像这样:

Rot RA;

void config(void)
{
    RA.arr = (RotArr){{1, 2, 3, 4, 5}};
    RotArr arr;
    int i;
    for (i = 0; i < 5; i++)
    {
        arr.elem[i] = i + 1;
    }
    RA.arr = arr;
}

请注意,(RotArr){{1, 2, 3, 4, 5}}RotArr类型的复合文字值。也可以将其写为(RotArr){ .elem = {1, 2, 3, 4, 5} }(RotArr){ .elem = { [0] = 1, [1] = 2, [2] = 3, [3] = 4, [4] = 5 } },以完全清楚化合物文字的哪些部分已显式设置(任何其余部分将设置为0),但是由于它只有一个成员,这些复合文字值的形式有些过分了。

答案 3 :(得分:1)

以下根据 C 语法工作。不确定这是您想要的。

#include <string.h>
#include <stdio.h>

typedef struct {
    int array[5];
    int number;
} Rot;

Rot RA = {{1,2,3,4,5}};

void main()
{
    RA = (Rot) {{5, 6, 7, 8, 9}};
    int arr[5];
    int i;
    for (i = 0; i < 5; i++)
    {
        arr[i] = i + 1;
    }

    memmove(RA.array, arr, sizeof(RA.array));
    // OR
    
    int l = sizeof(arr)/sizeof(arr[0]);
    for(int i =0 ; i < l ; ++i) {
        *(RA.array + i) = *(arr + i);
        printf("%d\n",RA.array[i]);
    }
}

此外,请使用 memmove,因为它允许内存重叠。