c – 是否可以通过溢出C中的第一个元素来写入数组的第二个元素?

在低级语言中,可以将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,这是最通用的解决方案,可以适用于此示例之外的所有情况.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...