c - 在缓冲区内取消引用

标签 c

假设我有一个 char 指针指向包含这些值(十六进制)的缓冲区:

12 34 56 78 00 00 80 00

我想将最后两个字节修改为 short 值 42。所以我想我必须这样做:

(short)*(pointer+6)=42;

编译器不会提示,但它不会做我期望它做的事情。有人可以告诉我正确的赋值方法吗?

最佳答案

转换为“short”是在分配之后发生的。你想要的是:

*(short*)(pointer+6) = 42;

顺便说一句,请注意别名问题。在这种情况下,您可能没问题,因为假定字符能够对任何内容进行别名(编辑:我已纠正;此示例打破了严格的别名,除非该数据的实际类型是“短”)。但一般来说,您应该非常警惕将一种指针类型转换为另一种指针类型的情况。 Google“严格别名”以获取更多信息。

关于c - 在缓冲区内取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2983103/

相关文章:

C语言、数组、指针

c - 防止 gcc 中错误的宏扩展

c - 解析 $PATH 变量并将目录名称保存到字符串数组中

c - 为什么要无限期地等待 - timerfd_create?我哪里出错了?

C - 线程函数 : Casting a (void*) to a (long) and code works? 但是如何呢?

c - 减少 malloc() 调用次数

c - 快速覆盖 -Werror 标志的方法?

ios - 如何将单个字符转换为 NSString?

c - 为什么 `double i = 3.3, j = 1.1; int k = i/j; printf("%d\n", k);` 得到 2?

c - 从 C 源代码编译的 DLL。无法在 excel VBA 中使用。找不到文件错误