C 为什么会出现错误:从类型“UINT8*”分配给类型“P\u Name\u t”时,类型不兼容
我不明白为什么我会出现上面的错误以及如何修复它。请帮忙C 为什么会出现错误:从类型“UINT8*”分配给类型“P\u Name\u t”时,类型不兼容,c,arrays,struct,assignment-operator,C,Arrays,Struct,Assignment Operator,我不明白为什么我会出现上面的错误以及如何修复它。请帮忙 //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 { ChipId
//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_芯片ID[0]。NameOfPart的类型相同。我不知道我是否遗漏了什么。请解释一下 除了隐藏在复杂的结构和指针后面, 您基本上是在尝试这样做:
#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或任何其他方法来执行此操作。除了将其隐藏在复杂的结构和指针后面, 您基本上是在尝试这样做:
#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或任何其他方法来实现这一点
[…]为什么会出现错误[?]日志条目->零件名称的类型为p_Name_t和PN_ChipID[0]。零件名称的类型相同
p_Name_t是一个数组,即5个单元8_t
PN_芯片ID[0]。零件名称的类型为p_Name\u t
所以这条线
PN_ChipID[0].NameOfPart = LogEntry->NameOfPart;
尝试分配给数组,即PN_芯片ID[0]。零件名称
在C语言中,不可能分配给数组,因此在编译上述行时会出现错误
[…]为什么会出现错误[?]日志条目->零件名称的类型为p_Name_t和PN_ChipID[0]。零件名称的类型相同
p_Name_t是一个数组,即5个单元8_t
PN_芯片ID[0]。零件名称的类型为p_Name\u t
所以这条线
PN_ChipID[0].NameOfPart = LogEntry->NameOfPart;
尝试分配给数组,即PN_芯片ID[0]。零件名称
在C语言中,不可能分配给数组,因此在编译上述行时会出现错误。为了这个线程和将来的答案搜索者的利益。LogEntry->NameOfPart是由5个元素组成的数组,即:
LogEntry->NameOfPart[0]
LogEntry->NameOfPart[1]
LogEntry->NameOfPart[2]
LogEntry->NameOfPart[3]
LogEntry->NameOfPart[4]
及
PN_芯片ID[0]。零件名称类似
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];
}
为了这条线索和未来的答案寻求者的利益。LogEntry->NameOfPart是由5个元素组成的数组,即:
LogEntry->NameOfPart[0]
LogEntry->NameOfPart[1]
LogEntry->NameOfPart[2]
LogEntry->NameOfPart[3]
LogEntry->NameOfPart[4]
及
PN_芯片ID[0]。零件名称类似
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];
}
1.C编程的第一条规则是不要键入def指针。2.C编程的第二条规则不使用_t作为自定义类型的名称,请参见POSIX。3.第三条规则-见1和2。请做一个。根据您提供的内容,猜测太多了。@0andriy:我同意第一条规则,而不是第二条,这是POSIX程序员的规则,POSIX之外还有C。我认为第二条规则是:不要键入def数组!。您正试图将UINT8*类型的值分配给UINT8[5]类型的左值。数组和指针不是一回事;赋值无效。当您试图用不必要的typedefing指针和数组混淆代码时,就会出现这种情况。1。C编程的第一条规则是不要键入def指针。2.C编程的第二条规则不使用_t作为自定义类型的名称,请参见POSIX。3.第三条规则-见1和2。请做一个。根据您提供的内容,猜测太多了。@0andriy:我同意第一条规则,而不是第二条,这是POSIX程序员的规则,POSIX之外还有C。我认为第二条规则是:不要键入def数组!。您正试图将UINT8*类型的值分配给UINT8[5]类型的左值。数组和指针不是一回事;赋值无效。当您试图用不必要的typedefing指针和数组混淆代码时,就会发生这种情况。为了这个线程和将来的答案搜索者的利益。LogEntry->NameOfPart是一个由5个元素组成的数组,即LogEntry->NameOfPart[0]',LogEntry->NameOfPart[1]',LogEntry->NameOfPart[2]',LogEntry->NameOfPart[3]',LogEntry->NameOfPart[4]',LogEntry->NameOfPart[5]'PN_芯片组[0]。零件名称“类似于”PN_芯片组[0]。零件名称[0],“PN_芯片组[0]。零件名称[1],“PN_芯片组[0]。零件名称[2]”等等。。因此,复制它的方法是通过一个循环,逐个元素PN_ChipID[0]复制元素;为了这条线索和未来的答案寻求者的利益。LogEntry->NameOfPart是一个由5个元素组成的数组,即LogEntry->NameOfPart[0]',LogEntry->NameOfPart[1]',LogEntry->NameOfPart[2]',LogEntry->NameOfPart[3]',LogEntry->NameOfPart[4]',LogEntry->NameOfPart[5]'PN_芯片组[0]。零件名称“类似于”PN_芯片组[0]。零件名称[0],“PN_芯片组[0]。零件名称[1],“PN_芯片组[0]。零件名称[2]”等等。。那么复制的方式是什么呢 这是通过一个逐元素PN_ChipID[0]复制元素的循环来运行它;