将uint8_t数组复制到结构
发布时间:2020-12-14 05:45:52 所属栏目:Windows 来源:网络整理
导读:我有这个数组 uint8_t *buffer = "JOHN:DOE:010119:M:FOO:BAR"; 我想逐字段地将它复制到数据结构中 typedef struct{ uint8_t firstName[5]; uint8_t pad1; uint8_t lastName[4]; uint8_t pad2; uint8_t dateOfBirth[7]; uint8_t pad3; uint8_t genre; uint8_
我有这个数组
uint8_t *buffer = "JOHN:DOE:010119:M:FOO:BAR"; 我想逐字段地将它复制到数据结构中 typedef struct{ uint8_t firstName[5]; uint8_t pad1; uint8_t lastName[4]; uint8_t pad2; uint8_t dateOfBirth[7]; uint8_t pad3; uint8_t genre; uint8_t pad4; uint8_t car[4]; uint8_t pad5; uint8_t phone[4]; uint8_t pad6; }DataStructTypeDef; 假设所有长度都是固定的(例如,firstName总是由4个字符组成,lastName为3等…) 我用这种方法: DataStructTypeDef foo; memcpy((void *)&foo,(void *)buffer,sizeof(DataStructTypeDef)); 当我尝试打印dateOfBirth时,它会显示从01012019开始的整个数组 int main(void) { DataStructTypeDef foo; memcpy((void *)&foo,sizeof(DataStructTypeDef)); printf("%s",foo.dateOfBirth); // It prints 010119:M:FOO:BAR //printf("%s",foo.dateOfBirth); // Expected value 010119 return 0; } 解决方法
由于您复制的char数组成员不是以null结尾,因此printf(“%s”)在遇到每个字符串的结尾时都不知道.
这可以通过限制打印的字符数量来控制printf … 例如: printf("%.*s",(int)sizeof(foo.dateOfBirth),foo.dateOfBirth); 相当于: printf("%.6s",food.dateOfBirth); .*指定要打印的字符的“精度”.所以在你的情况下,dateOfBirth = precision / size 6. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 注册表 – 在应用程序崩溃时禁用调试提示
- hyper-v – Hyperv-V创建神秘的.avhdx文件并填满磁盘空间
- Windows – 没有加入域上的BYOD(访问文件)?
- windows – 具有多个根的IIS
- windows-server-2008-r2 – 服务器08 RDP:如果已经连接了相
- 在Windows 7 LAN上托管PXE或网络启动映像?
- 批处理文件 – FOR循环中的CHOICE – Windows批处理
- windows – WinDbg Dr. Watson minidump – 需要最初为安装
- windows – 关于进程’地址空间中的NULL指针分配分区的问题
- 是否可以通过ACS 2.0身份提供商从Windows Live ID获得任何其