这是类型转换的C程序。它可以在Windows中工作,但不能在Linux中工作。为什么?
#include <stdio.h>
void main()
{
int a = 30;
char b[10] = "hi";
a=(char*)b;
printf("%s",a);
}
答案 0 :(得分:0)
更好的问题是为什么它完全起作用:巧合的是int
和char*
都具有相同的大小。您永远不要假设它,应该避免虚假的类型假设,并始终使用正确的类型。
在我的Mac上,int
是4个字节,但是char*
是8个字节。因此,将4个字节放在堆栈上,然后弹出8个字节,然后再将其用作地址,这就是分段错误的原因。