Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中更改结构的数组成员_C_Arrays_Struct_Memcpy_Compound Literals - Fatal编程技术网

如何在C中更改结构的数组成员

如何在C中更改结构的数组成员,c,arrays,struct,memcpy,compound-literals,C,Arrays,Struct,Memcpy,Compound Literals,我试图编程一个微控制器,使其能够与利用SPI的外部闪存芯片进行通信。操作码(操作码)后跟地址字节,然后按顺序发送数据字节。 我不想每次为不同的命令定义这些字节,而是想创建一个保存此特定顺序的结构。我还想更改结构中的整个数组 我试图创建一个包含三个成员的结构,比如操作码、地址和数据 void main (void) { //Defining Structure struct Command_order { unsigned char opcode; unsigned char ad

我试图编程一个微控制器,使其能够与利用SPI的外部闪存芯片进行通信。操作码(操作码)后跟地址字节,然后按顺序发送数据字节。 我不想每次为不同的命令定义这些字节,而是想创建一个保存此特定顺序的结构。我还想更改结构中的整个数组

我试图创建一个包含三个成员的结构,比如操作码、地址和数据

void main (void)
{
//Defining Structure
struct Command_order {
    unsigned char opcode;
    unsigned char address[3];
    unsigned char data[5];
 };

 while(1)
 {
   struct Command_order temp = {0x02, {0x00,0x17,0x00} , {0x01,0x02,0x03,0x04,0x05}}; //Initialization of structure

   temp.address = {0x1F,0x03,0xC2}; //Trying to change only address 

 }
}

然而,这是行不通的,我的结构思想是错误的还是语法错误。我不熟悉这个概念。

不能将数组作为一个整体分配给它。您需要分配给每个数组元素

temp.address[0] = 0x1F;
temp.address[1] = 0x03;
temp.address[2] = 0xC2;

数组没有赋值运算符。必须将一个数组的元素复制到另一个数组中

为此,您可以使用例如复合文字和标准函数
memcpy
,该函数在标题
中声明

这是一个演示程序

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

int main( void )
{
    struct Command_order 
    {
        unsigned char opcode;
        unsigned char address[3];
        unsigned char data[5];
    };    

    struct Command_order temp;

    memcpy( temp.address, ( unsigned char[] ) { 0x1F, 0x03, 0xC2 }, 3 * sizeof( unsigned char ) );
}    

可以一次设置一个数组单元格,也可以使用填充/复制方法,如
memcpy
。在C语言中,数组是不可修改的左值。它们不能像您所做的那样出现在赋值操作的左侧。
memcpy( temp.address, ( unsigned char[] ) { 0x1F, 0x03, 0xC2 }, sizeof( temp.address ) );