如何使用此mxt_config *cfg
指针分配存储在数组中的值?主要思想是分配一个数组值,以将指针移至该结构的下一个元素。
typedef struct
{
unsigned char F_Id;
unsigned char V_Id;
unsigned char Ve;
unsigned char Bu;
unsigned char Mat;
}InfoId_t;
struct mxt_config
{
InfoId_t id;
unsigned char info_crc;
unsigned char config_crc;
};
int main()
{
unsigned char line1[7] = {0x1,0x2,0x3, 0x4, 0x5,0x6, 0x7};
mxt_config *cfg = NULL;
mxt_config objcfg;
cfg = &objcfg;
for (int i = 0; i < 7; i++)
{
(unsigned char*)&cfg->id + i = line1[i];
}
}
任何帮助都会非常有用,因为可以肯定有问题,但是我看不到什么。
先谢谢
答案 0 :(得分:0)
这种方法有些错误:尽管标准确保结构成员将按预期顺序存储,但不能保证它们是连续的(可以在某些成员之间添加一些填充) )。
[class.mem] / 17:具有以下内容的类的非静态数据成员 分配相同的访问控制,以便以后的成员拥有 类对象中的更高地址。 (...) 实施对齐要求可能会导致两个相邻成员 不得彼此立即分配;所以可能 虚拟功能和虚拟库管理空间的要求 课程。
所有成员均为unsigned char
的事实可以降低风险(例如,不存在对齐问题,不存在字节序意外),但不能保证100%工作。您至少应该断言该结构具有预期的大小,以避免出现意外情况:
assert(sizeof(mxt_config)==7);
如果尽管您希望继续存在风险,则需要更正代码:
for (int i = 0; i < 7; i++)
{
*((unsigned char*)&cfg->id + i) = line1[i];
}
或者,您可以选择算法std::copy()
:
copy (line1, line1+7, reinterpret_cast<unsigned char*>(&cfg->id));