【问题标题】:Allocate space in struct for char* array在 struct 中为 char* 数组分配空间
【发布时间】:2018-03-26 03:06:18
【问题描述】:

我正在尝试在结构内分配空间。该结构包含网络数据包的信息。

结构:

struct STRUCT_SVC_ROOM_CREATE
{
    PacketHeader Header;
    unsigned char TitleLength;
    char* RoomTitle = new char[TitleLength];
    short SuddenFactor;
    short GameModeFactor;
    unsigned char Password[4];

    int MaxMen;
};

看这两行代码

unsigned char TitleLength;

char* RoomTitle = new char[TitleLength];

1st -> 文本长度(1 字节)

2nd -> 文本本身(TitleLength 字节)

这就是我创建基于另一个结构的结构的方式。

STRUCT_SVC_ROOM_CREATE* RoomCreate = (STRUCT_SVC_ROOM_CREATE*)pHeader;

pHeader 是另一个结构体,它包含所有信息。然后我放入另一个结构以获取正确的数据位置。

但它不起作用。那么问题来了:如何正确分配空间并使用 TitleLength 中指定的大小构建 struct char*?

【问题讨论】:

    标签: arrays struct char


    【解决方案1】:

    你不应该在结构定义中初始化对象。

    struct STRUCT_SVC_ROOM_CREATE
    {
        PacketHeader Header;
        unsigned char TitleLength;
        char* RoomTitle;
        short SuddenFactor;
        short GameModeFactor;
        unsigned char Password[4];
    
        int MaxMen;
    };
    
    void someFunction()
    {
       STRUCT_SVC_ROOM_CREATE* foo = new STRUCT_SVC_ROOM_CREATE;
       foo->TitleLength = 10;
       foo->RoomTitle = new char[foo->TitleLength];
    
    }
    

    这是请求的类实现(未测试):

    class SVC_ROOM_CREATE{
    
    private:
        PacketHeader Header;
        char* RoomTitle;
        short SuddenFactor;
        short GameModeFactor;
        unsigned char Password[4];
    
        int MaxMen;
    
    public:
        SVC_ROOM_CREATE(PacketHeader packet_header, int length, short sud_factor, short gm_factor, unsigned char pwd[], int max)
        {
            Header = packet_header;
            RoomTitle = new char[length];
            SuddenFactor = sud_factor;
            GameModeFactor = gm_factor;
            memcpy( Password, pwd, sizeof(Password));
            MaxMen = max;
        }
    
    
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        PacketHeader Header;
        unsigned char bar[4] = "pas";
        int TitleLength = 10;
        int SuddenFactor = 1;
        int GameModeFactor = 2;
        int MaxMen = 15;
        SVC_ROOM_CREATE* foo = new SVC_ROOM_CREATE(Header, TitleLength, SuddenFactor, GameModeFactor, bar, MaxMen);
    
        return 0;
    }
    

    【讨论】:

    • 我明白了。但是如果我还没有将数据放入结构中,我怎么知道 TitleLenght 的值呢?
    • 好吧,你先把数据放在 TitleLength 里。你为什么使用结构而不是类?
    • 我认为你应该阅读更多关于类的内容。它与结构没有什么不同,但它会给你提供有用的功能,比如“构造函数”。
    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多