【问题标题】:How to change array member of a structure in C如何在C中更改结构的数组成员
【发布时间】:2019-11-20 07:29:30
【问题描述】:

我正在尝试对微控制器进行编程,使其能够与使用 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 

 }
}

但是这行不通,是我的结构想法错误还是语法错误。我是这个概念的新手。

【问题讨论】:

  • 要么一次设置一个数组单元格,要么使用填充/复制方法,如memcpy。在 C 中,数组不是可修改的左值。它们不能像您所做的那样出现在赋值操作的左侧。

标签: c arrays struct memcpy compound-literals


【解决方案1】:

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

为此,您可以使用例如复合文字和标头 <string.h> 中声明的标准函数 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的调用

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2011-04-11
      • 2011-03-04
      • 1970-01-01
      • 2019-04-15
      相关资源
      最近更新 更多