如何遍历数组以将它们复制到另一个 uint32_t 类型的数组中?

How to iterate through arrays to copy them into another array of type uint32_t?

我创建了一个由整数数组结构 states[2] 组成的 C 程序。我还需要一个名为 store 的 uint32_t 类型数组。我只想将数组 states[0] 的内容复制到 store[0],将 states[1] 的内容复制到 store[1]。我对 char 数组使用了这种方法,它似乎有效。我的代码如下所示:

 #include <stdlib.h>
 #include <stdio.h>

 int main()
 {
     uint32_t *store[2];
     int i;
     int *states[2];
     int states[0] = {1,0,0,1};
     int states[1] = {0,0,0,2};

     for (i = 0; i < 3; i++)
     {
        store[i] = states[i];
        i++;
     }
 }

但是代码没有执行,并说我声明的数组无效format.I我不确定这是否是正确的方法。 有人可以帮我解决这个问题吗?

我已经重写了您的示例 - 强制数组的大小 - 在这里,它有效。

编辑 - 添加 printf 调用以显示数组存储的内容。

 #include <stdlib.h>
 #include <stdio.h>

 int main()
 {
     int store[3][4];
     int i;
     int states[3][4] = {{1,0,0,1},{0,0,0,2}};

     for(i=0; i<3; i++)
     {
        printf( "store[%d] = ", i );
        for( int inner = 0; inner < 4; inner++ )
        {
           store[i][inner] = states[i][inner];
           printf( "%d ", store[i][inner] ); 
        }
        printf( "\n" );
     }

    return( 0 );   

}

在数组中创建指针时,您确实需要分配然后复制。

你的代码有两个问题,

首先,

int *states[2];
int states[0] = {1,0,0,1};
int states[1] = {0,0,0,2};

有问题。当访问一个变量时,类型没有被提及,它只在定义时需要。所以,使用 int states[0]..[1] 是无效的。

然后,其次,

states[0] = {1,0,0,1};

state[0]int * 类型,您正试图用 int 的大括号括起来的初始化列表来初始化它。这也不对。

您可以修改代码以在访问数组元素时删除类型并使用复合文字,最终如下所示

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>   //added for uint32_t 

 int main(void)        //corrected signature
 {
     uint32_t *store[2];
     int i;
     int *states[2];
     states[0] = (int []){1,0,0,1};     //compound literal, C99 and above
     states[1] = (int []){0,0,0,2};

     for (i = 0; i < 2; i++)           //bound corrected
     {
        store[i] = states[i];
                                       //i++; remove this, you're incrementing twice
     }
 }