<分区>
我有一个包含 50 个 char
的数组:
char arr[50];
有人告诉我,在 arr[1]
到 arr[4]
中,有一个 int
我需要获取。
我做到了:
int *p = (int *)(arr+1);
return *p;
我被告知这是一个错误。为什么?
<分区>
我有一个包含 50 个 char
的数组:
char arr[50];
有人告诉我,在 arr[1]
到 arr[4]
中,有一个 int
我需要获取。
我做到了:
int *p = (int *)(arr+1);
return *p;
我被告知这是一个错误。为什么?
最佳答案
在我的系统上,sizeof(char)=1
,sizeof(int)=4
。
问题的根源在于您正在强制转换为指向 int (int *)
的指针,这掩盖了基础类型 char
的真正对齐。假设一个 4 字节的 int,编译器尝试访问 4 个字节而不是 1 个字节。
给定:
char arr[] = "ABCDEFGHI";
然后你的代码产生:
int *p = (int *)(arr+1); /* *p = 1162101570, interpreting "BCDE" as int */
为了利用 C 的自动类型转换,您需要更像这样的东西:
int p = (int)(*(arr+1)); /* p = 66, the ASCII code for 'B' */
或者,根据您对 arr
的原始声明,不那么晦涩,在技术上更正确,
int p = (int)arr[1]; /* p = 66 */
但实际上,这就是您所需要的:
int p = arr[1]; /* p = 66 */
关于c - 从字符数组中获取一个 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180768/
相关文章:
c# - 强制转换为无效枚举值 Enum.ToObject,不会引发异常,将 Enum 设置为 int
c++ - 将包含 void 指针的一对转换为一对其他类型的指针
android - OpenCV ORB 特征检测器如何工作?
html - 使一个 div/span 在更大的 div/span 的右侧显示其内容?
c - OpenGL glBegin 和 glPushMatrix
arrays - DirectCast(或替代方案)将类型数组中的值作为第二个参数?
C - Valgrind 和 "Conditional jump or move depends on uninitialised value(s)"错误