如何在C中更改结构的数组成员
How to change array member of a structure in C
我正在尝试对微控制器进行编程,使其能够与使用 SPI 的外部闪存芯片进行通信。必须按顺序发送操作码(opcode),然后是地址字节,然后是数据字节。
我不想每次都为不同的命令定义这些字节,而是想创建一个结构来保存这个特定的顺序。另外我想更改结构中的整个数组。
我尝试创建具有操作码、地址和数据等三个成员的结构。
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;
数组没有赋值运算符。您必须将一个数组的元素复制到另一个数组中。
为此,您可以使用例如复合文字和在 header <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 ) );
我正在尝试对微控制器进行编程,使其能够与使用 SPI 的外部闪存芯片进行通信。必须按顺序发送操作码(opcode),然后是地址字节,然后是数据字节。 我不想每次都为不同的命令定义这些字节,而是想创建一个结构来保存这个特定的顺序。另外我想更改结构中的整个数组。
我尝试创建具有操作码、地址和数据等三个成员的结构。
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;
数组没有赋值运算符。您必须将一个数组的元素复制到另一个数组中。
为此,您可以使用例如复合文字和在 header <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 ) );