gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:47:40 26 4
gpt4 key购买 nike

在低级语言中,可以mov一个双字(32位)到第一个数组元素,这将溢出以写入第二、第三和第四个元素,或者mov 一个字(16 位)到第一个,它将溢出到第二个元素。

如何在c中实现同样的效果?例如尝试时:

char txt[] = {0, 0};
txt[0] = 0x4142;

它给出警告 [-Woverflow]

并且txt[1]的值没有改变并且txt[0]设置为0x42.

如何获得与汇编中相同的行为:

mov 字 [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++ - 是否可以通过溢出 C 中的第一个元素来写入数组的第二个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50390467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com