【问题标题】:incompatible types in assignment c赋值 c 中的不兼容类型
【发布时间】:2013-05-15 19:45:21
【问题描述】:

我的头文件中定义了以下结构,

struct nl_packet {
      int seq;
      FRAMETYPE type;
      CnetAddr dest;
      CnetAddr src;
      uint32_t checksum;
      size_t length;
      char data[NL_MAXDATA];
    };


struct seq_Info  {

   int seqNum;
   size_t length;
   char data[NL_MAXDATA];

};

struct msg_Received {

   CnetAddr src;
   struct seq_Info seqInfo[BUFSIZ];
   int lastReceived;

};

然后在另一个文件中,我有以下分配带有“分配错误中的不兼容类型”,

msgRec[i].seqInfo[j].data = packet.data;

我确实有其他类似的语句在相同的方法中,但它们工作得非常好,

msgRec[i].seqInfo[j].seqNum = packet.seq;
msgRec[i].seqInfo[j].length = packet.length;

即使nl_packet struct和seq_Info struct中的数据字段都具有相同的类型,那么这个错误会出现吗??

提前致谢

【问题讨论】:

    标签: c arrays copying incompatibletypeerror


    【解决方案1】:

    您正在分配数组。你不能这样做。您必须复制数组内容。你可以这样做:

    memcpy(msgRec[i].seqInfo[j].data, packet.data, sizeof(char)*NL_MAXDATA);

    【讨论】:

    • sizeof(char) 始终为 1,根据 C 规范,因此从不需要它。
    • @JoachimPileborg 是的,但是...#define char wchar。有些人很奇怪。
    • 如果有人这样做,他们应该得到他们将遇到的问题! ;)
    • "strange" 对于会这样做的人来说不是正确的词,在 C++ 中,这将是未定义的行为:“翻译单元不得 #define 或 #undef 名称在词法上与关键字相同”
    • 你无法保护自己免受奇怪的定义(#define sizeof(char) 7 怎么样?)。但是sizeof 可以提高清晰度,我会使用sizeof(packet.data[0])
    猜你喜欢
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2021-06-07
    • 2012-03-13
    • 2017-03-26
    相关资源
    最近更新 更多