gpt4 book ai didi

将 char 指针转换为 int 指针 - 缓冲区错误 10

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:23 25 4
gpt4 key购买 nike

在此answer ,作者讨论了如何在 C 中转换指针。我想尝试一下并构造了这段代码:

#include <stdio.h>

int main(void) {
char *c;
*c = 10;
int i = *(int*)(c);
printf("%d", i);
return 1;
}

这会编译(带有警告),当我执行二进制文件时,它只会输出 bus error: 10。我知道 char 比 int 小。我也是从这里了解到post我应该预料到这个错误。但如果有人能澄清这里发生的事情,我将不胜感激。此外,我想知道是否有正确的方法来转换指针并取消引用 int 指针以获得 10(在本例中)。谢谢!

编辑:为了阐明我的意图,如果您担心的话,我只是想提出一个“有效”的指针转换示例。这只是为了表明这是允许的并且可能在 C 中工作。

最佳答案

c 在您取消引用时未初始化。这是未定义的行为。

同样,即使 c 被初始化,您将其类型转换为 int * 然后取消引用也会获得一些额外的字节来自内存,这也是未定义的行为。

说明您正在尝试的工作(安全)示例:

int main(void)
{
int i = 10;
int *p = &i;
char c = *(char *)p;
printf("%d\n", c);
return 0;
}

这个程序将在小端机器上打印10,在大端机器上打印0

关于将 char 指针转换为 int 指针 - 缓冲区错误 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944196/

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