在struct中定义并使用char字符串

时间:2016-04-23 15:45:21

标签: c struct

我想构建一个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字符串的struct,所以我可以存储CRC字符串的数据。

4 个答案:

答案 0 :(得分:3)

使用memcpy。即。

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

将内容复制到数组中。

你需要

#include <string.h>

使用此功能

答案 1 :(得分:3)

你不能将字符串分配给另一个字符串。喜欢

if any(x in a for x in b):

以上方法错了。 您需要在库字符串中使用命令 strcpy

packet.crc = crc;

不要忘记调用库 string.h

答案 2 :(得分:2)

您无法直接为彼此分配数组。在空终止字符串的情况下,您可以使用memcpy(),(或strcpy())等库函数。另一种方法是通过循环将元素从源数组逐个复制到目标。

答案 3 :(得分:1)

除了其他注释之外,我担心你在函数内定义packet_t变量packet,当函数返回时,分配给packet的内存将“消失”。< / p>

最好在packet中声明main,然后使用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 ;
}