gpt4 book ai didi

c - 从 unsigned int 到 char 指针的类型转换中的段错误

转载 作者:行者123 更新时间:2023-11-30 18:44:35 24 4
gpt4 key购买 nike

我是 c 新手。只是学习。我想做的是初始化一个 unsigned int 变量类型,然后在其中存储 char 类型数组的地址,之后我尝试使用 int 作为指针并使用 unsigned int 打印数组,但我得到了段错误,不知道为什么?它是char类型数组的内存地址的打印值。但不是内存地址处的实际值。有人可以帮忙吗?

#include <stdio.h>

int main()
{
char char_arr[4] = {'a', 'b', 'c', 'd'};
int i;

unsigned int hackyPointer;
hackyPointer = (unsigned int) char_arr;

for (i = 0; i < 4; i++)
{
printf("[hacky Pointer] now points to %p which contains value %c\n",hackyPointer, *((char *) hackyPointer));
hackyPointer += sizeof(char);
}

}

最佳答案

问题是您试图容纳的数字大于 int 可以存储的数字,也就是说,如果您运行的是 x64

在 64 位系统中,指针的大小为 8 字节,而 int 通常为 4 字节。指针地址的工作方式与数字类似,因此当您将指针转换为 int 时,地址将被截断。

int 转换回指针,它现在将包含一些不属于您的程序的其他地址,这可能会导致访问冲突,或者换句话说,段错误。

使用更大的 int 来保存地址,将其转换为 int 指针或使用保证足够大的 uintptr_t 类型保存地址。

关于c - 从 unsigned int 到 char 指针的类型转换中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57595110/

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