为什么此C程序在Windows中而不在Linux中给出o / p?

时间:2018-11-07 03:49:27

标签: c linux windows

这是类型转换的C程序。它可以在Windows中工作,但不能在Linux中工作。为什么?

#include <stdio.h>
void main()
{
  int a = 30; 
  char b[10] = "hi";
  a=(char*)b;
  printf("%s",a);
}

1 个答案:

答案 0 :(得分:0)

更好的问题是为什么它完全起作用:巧合的是intchar*都具有相同的大小。您永远不要假设它,应该避免虚假的类型假设,并始终使用正确的类型。

在我的Mac上,int是4个字节,但是char*是8个字节。因此,将4个字节放在堆栈上,然后弹出8个字节,然后再将其用作地址,这就是分段错误的原因。