提问人:Sako 提问时间:10/12/2023 更新时间:10/12/2023 访问量:62
在 C 中从 int 数组转换为 char 指针
Casting from int array to char pointer in C
问:
int v_1[10] = { -1,1000,2 };
int a;
a = strlen(((char*)v_1 + 1));
我很难理解为什么在这种特殊情况下“a”变量等于 5。
我也在努力掌握 char* 的类型转换行为。如果这是我缺少的排版的一些计算,我不会解开,因为我无法以任何方式获得 5。
我试图修改数组中的值,但我无法辨别导致结果的原因。
我正在Windows平台上工作。
答:
4赞
paddy
10/12/2023
#1
的值很大程度上取决于您在哪个系统上运行它。据推测,在本例中,您使用的系统等于 4,整数存储在 little-endian 中。a
sizeof int
一个简单的程序可以以十六进制形式显示数据的内容:
#include <stdio.h>
int main(void)
{
int v_1[10] = { -1,1000,2 };
for (size_t i = 0; i < sizeof v_1; i++) {
if (i > 0 && i % 4 == 0) printf(" "); // add a space every 4 bytes
printf("%02hhx", *((char*)v_1 + i));
}
printf("\n");
}
输出(在具有 4 字节小端整数的系统上):
ffffffff e8030000 02000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
现在,你的问题是关于为什么等于 5。要回答这个问题,请再次查看输出:strlen(((char*)v_1 + 1));
ffffffff e8030000
^
This position is (char*)v_1 + 1
您可以看到,在到达 NUL 字节之前,它将单步执行五个字节 (),这是分隔字符串末尾的内容。这就是为什么在您的系统上,您获得值 5 的原因。strlen
ff ff ff e8 03
评论
strlen
int