c – 是否可以通过溢出C中的第一个元素来写入数组的第二个元素?
发布时间:2020-12-16 10:14:47 所属栏目:百科 来源:网络整理
导读:在低级语言中,可以将dword(32位)移动到第一个数组元素,这将溢出以写入第二,第三和第四个元素,或者将一个字(16位)移动到第一个,它将溢出到第二个要素. 如何在c中实现同样的效果?当试图例如: char txt[] = {0,0};txt[0] = 0x4142; 它会发出警告[-Woverflow]
在低级语言中,可以将dword(32位)移动到第一个数组元素,这将溢出以写入第二,第三和第四个元素,或者将一个字(16位)移动到第一个,它将溢出到第二个要素.
如何在c中实现同样的效果?当试图例如: char txt[] = {0,0}; txt[0] = 0x4142; 它会发出警告[-Woverflow] 并且txt [1]的值不变,txt [0]设置为0x42. 如何获得与汇编相同的行为: mov word [txt],0x4142 前一个汇编指令将第一个元素[txt 0]设置为0x42,将第二个元素[txt 1]设置为0x41. 编辑 这个建议怎么样? 将数组定义为单个变量. uint16_t txt; txt = 0x4142; 用第一个元素的((uint8_t *)& txt)[0]和第二个元素的((uint8_t *)& txt)[1]访问元素. 解决方法
如果您完全确定这不会导致分段错误,您必须使用
memcpy()
uint16_t n = 0x4142; memcpy((void *)txt,(void *)&n,sizeof(uint16_t)); 通过使用void pointers,这是最通用的解决方案,可以适用于此示例之外的所有情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |