sizeof和结构体

    技术2024-07-22  67

    问题叙述:

    最近在项目中使用到了如下一段代码:

    typedef struct { bool Enable; //使能 IPADDR HostIP; //< 主机IP char HostPort[NAME_ID_LEN]; //端口 char TerminalID[NAME_ID_LEN]; //终端ID char SimID[NAME_ID_LEN]; //SIMID }TestCfg; int func() { TestCfg *ptestcfg = (TestCfg *)(pBuf+sizeof(TestCfg)); //获取存放在内存中的结构体的数据 TestCfg cfgtest; memcpy(&cfgtest,ptestcfg,sizeof(ptestcfg)); //拷贝数据防止数据传递时丢失 setConfig(cfgtest); //将配置保存下去 }

    代码的实际运行效果中并没有将配置保存下去,但是如果直接传递对指针指向的内存进行保存却可以写入。

    问题分析

    经过查找发现是因为在使用memcpy时候sizeof(ptestcfg),是取了指针变量占用的内存大小(在32位系统中占用4字节,64位系统占用8字节)并不是结构体(TestCfg )占用的内存大小。 在之后的代码中要养成良好的风格,尽量对变量类型进行sizeof操作以避免这种错误的发生。

    Processed: 0.009, SQL: 9