【问题标题】:Define and use a char string in the struct在结构中定义和使用一个 char 字符串
【发布时间】:2016-08-17 05:03:59
【问题描述】:

我想构建一个 struct 并包含 int 和 char 变量。这是我的代码:

typedef struct {
        uint16_t type;      
        uint16_t sn;
        int data1;
        int data2;
        char crc[1024];
    }packet_t;

然后我用一个方法来创建struct:

packet_t packetCreate(uint16_t type,uint16_t sn, uint16_t data1, 
uint16_t data2, char crc[1024])
{
    packet_t packet;
    packet.type = type;
    packet.sn = sn; 
    packet.data1 = data1;
    packet.data2 = data2;
    packet.crc = crcr;
    return packet;
}

我也在代码中定义了相应的变量。但是当我编译代码时它不起作用并显示:

从行中的“char *”类型分配给“char[1024]”类型时不兼容的类型:packet.crc = crcr; 我应该如何定义和使用结构?我想构建一个包含 char 字符串的结构,这样我就可以存储数据的 CRC 字符串。

【问题讨论】:

标签: c struct


【解决方案1】:

除了其他 cmets,我担心你在函数内部定义了 packet_t 变量 packet,当函数返回分配给 packet 的内存时,分配给 packet 的内存将“消失”。

最好在main中声明packet,然后调用地址为packet的例程——或者指向packet的指针。

然后您可以将您的功能更改为

void packetCreate(packet_t *p_packet, ruint16_t type,uint16_t sn, uint16_t data1, 
uint16_t data2, char crc[1024])
{
   // p_packetn =  &packet - it is a pointer to the packet
    p_packet->type = type;
    p_packet->sn = sn; 
    p_packet->data1 = data1;
    p_packet->data2 = data2;
    p_packet->crc = crcr; // note other answers to correct this line
    return ;
}

【讨论】:

    【解决方案2】:

    使用memcpy。即

    memcpy(packet.crc, crc, sizeof(packet.crc));
    

    将内容复制到数组中。

    你需要

    #include <string.h>
    

    使用此功能

    【讨论】:

    • NB 缺少逗号 - 应该是 memcpy(packet.crc, crc, sizeof(packet.crc)); - 我无法尝试编辑它,因为我需要输入至少 6 个字符
    【解决方案3】:

    您不能直接将数组相互分配。您可以使用库函数,如memcpy(),(或strcpy(),在以空结尾的字符串的情况下)。另一种方法是通过循环将源数组中的元素一个一个复制到目标。

    【讨论】:

      【解决方案4】:

      你不能只是将字符串分配给另一个字符串。像

      packet.crc = crc;
      

      上面的方法是错误的。 您需要在此处使用库 string 中的命令 strcpy。

      strcpy(packet.crc,crc);
      

      别忘了调用库string.h。

      【讨论】:

      • 注意:C 没有字符串类型。这都是惯例。无论如何,它们不是同一类型。成员是数组,参数是指针。
      猜你喜欢
      • 1970-01-01
      • 2021-03-11
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多