我不明白为什么我收到上述错误以及如何修复它。请帮忙。
//STRUCTURES
typedef UINT8 P_Name_t[5];
typedef UINT8 ChipSN_t[3];
typedef struct
{
ChipSN_t ChipSN;
<other members>
} ChipIdent_t;
typedef struct Data_t
{
ChipIdent_t ReadOnlyMemID;
<other members>
} Data_t;
typedef struct
{
P_Name_t NameOfPart;
<other members>
} Log_t;
Data_t Data_Src;
typedef struct
{
P_Name_t NameOfPart;
ChipSN_t ChipSN;
}PartNum_ID_t;
//VARIABLE DECALARTION
PRIVATE PartNum_ID_t PN_ChipID[12];
PRIVATE Log_t *LogEntry = NULL;
//Usage in code
PN_ChipID[0].NameOfPart = LogEntry->NameOfPart;
PN_ChipID[0].ChipSN = Data_Src.ReadOnlyMemID.ChipSN;
我不明白为什么会收到错误。 LogEntry->NameOfPart
类型为P_Name_t
,PN_ChipID[0].NameOfPart
属于同一类型。我不知道我在这里遗失了什么。请解释。
答案 0 :(得分:2)
除了将它隐藏在复杂的结构和指针之外,
你基本上是想这样做:
#include <string.h>
int main(void)
{
char a[5];
char b[5]={'a', 'b', 'c', 'd', 'e'};
// version 1 works
memcpy(a, b, sizeof(b)); // assuming that a and b are same size.
// version 2 gives the same error as you quote
//a=b;
return 0;
}
它给出了同样的错误。 虽然用作R值的数组标识符会衰减为指针, 你不能“将指向数组的指针”写为L值。
此外,你想达到什么目的? 你无论如何需要做的是将一个数组的内容复制到另一个数组。 使用memcpy()或任何其他方法来做到这一点。
答案 1 :(得分:2)
incompatible types when assigning to type 'P_Name_t' [...]
[...]为什么我收到错误[?]
LogEntry->NameOfPart
的类型为P_Name_t
,而PN_ChipID[0].NameOfPart
属于同一类型。
P_Name_t
是一个数组,即5 unit8_t
。
PN_ChipID[0].NameOfPart
的类型为P_Name_t
。
所以这一行
PN_ChipID[0].NameOfPart = LogEntry->NameOfPart;
尝试分配给一个数组,即PN_ChipID[0].NameOfPart
。
在C中,不可能分配给数组,因此编译上述行时出错。
答案 2 :(得分:0)
为了这个主题和未来的答案寻求者的利益。 LogEntry->NameOfPart
是一个包含5个元素的数组,即:
LogEntry->NameOfPart[0]
LogEntry->NameOfPart[1]
LogEntry->NameOfPart[2]
LogEntry->NameOfPart[3]
LogEntry->NameOfPart[4]
和
PN_ChipID[0].NameOfPart
类似
PN_ChipID[0].NameOfPart[0]
PN_ChipID[0].NameOfPart[1]
PN_ChipID[0].NameOfPart[2]
PN_ChipID[0].NameOfPart[3]
PN_ChipID[0].NameOfPart[4]
因此,复制它的方法是通过循环复制元素
来运行它for i=....
{
PN_ChipID[0].NameOfPart[i] = LogEntry->NameOfPart[i];
}