在我正在阅读的C ++代码中,发现了以下内容。谁能帮助我了解以下陈述的作用?
char buffer[4096];
// some code
int size = *(int*)(buffer);
TL; DR:此代码不好,请忽略它并继续前进。
(buffer)
此括号表示程序员对自己的编程能力没有把握。
由于buffer
是字符数组,因此单独使用标识符buffer
可为您提供第一个元素的char
指针:指针。
(int*)
这是强制转换,将char
指针转换为int
指针。
*
接受该整数指针的内容,结果存储在integer中size
。
请注意,此代码是完全不安全的。许多指针转换会调用定义不明确的行为。可能存在对齐问题。可能存在指针别名问题(Google“严格别名规则”)。此特定代码也是依赖于字节性的,这意味着它要求字符数组的内容具有给定的字节顺序。
总体而言,在执行此类操作时,使用诸如int
或char
(可能是带符号)的带符号类型没有任何意义。特别是,该char
类型非常有问题,因为它具有实现定义的签名,应避免使用。使用unsigned char
或uint8_t
代替。
稍差一些的坏代码看起来像这样:
#include <stdint.h>
uint8_t buffer[4096];
// some code
uint32_t size = *(uint32_t*)buffer;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句