gpt4 book ai didi

C 字符串向后赋值

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

我有一些反编译的 C 源代码,看到了这个奇怪的字符串赋值。

char v1[21];
v1[0] = 0x75767778;
"tsrqponmlkjihgfedcba" = v1;

这是怎么回事?这怎么可能?

最佳答案

char v1[21];

目前没问题;将 v1 定义为 21 个 char 元素的数组。

v1[0] = 0x75767778;

合法,但不正确。 v1[0] 是一个 char 对象。除非 CHAR_BIT >= 32(这不太可能),否则它不能保存值 0x75767778。如果普通 char 是无符号的且 CHAR_BIT==8,它将分配值 0x78;如果普通 char 被签名,它可能会做同样的事情,但值是实现定义的。

可能相关的是,0x75767778 的字节是字符 'u''v' 的 ASCII 码>'w''x'

"tsrqponmlkjihgfedcba" = v1;

这简直是违法的。字符串文字不能位于赋值的左侧,并且 C 不支持数组赋值。

显然,您的“反编译器”(您尚未确定)正在生成或多或少看起来像 C 的东西,但实际上不是。

如果左右两侧的赋值颠倒,这可能部分得到解释。即使是这样,输出也似乎是某种伪代码。 (代码是否实际使用了 = 而不是 ->=>?)

查看“反编译”的源代码会很有帮助——了解您正在使用的“反编译器”并查看其文档也会有所帮助。

我的猜测是源代码有一个像"xwvutsrqponmlkjihgfedcba"这样的字符串文字,生成的代码使用整数赋值来复制"xwvu"(表示为 0x75767778)并对剩余的 20 个字符进行单独操作,但这只是一个猜测。或者它可能是 "abcdefghijklmnopqrstuvwx" 并且由于字节顺序而被颠倒了。

关于C 字符串向后赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31496063/

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