Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个C程序在windows而不是Linux中提供o/p?_C_Linux_Windows - Fatal编程技术网

为什么这个C程序在windows而不是Linux中提供o/p?

为什么这个C程序在windows而不是Linux中提供o/p?,c,linux,windows,C,Linux,Windows,这里是一个C程序的类型铸造。它在windows中工作,但在linux中不工作。为什么? #include <stdio.h> void main() { int a = 30; char b[10] = "hi"; a=(char*)b; printf("%s",a); } #包括 void main() { INTA=30; 字符b[10]=“hi”; a=(char*)b; printf(“%s”,a); } 更好的问题是为什么它能工作:巧合的是int和cha

这里是一个C程序的类型铸造。它在windows中工作,但在linux中不工作。为什么?

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

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


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

可能您在Windows上使用32位编译,在Linux上使用64位编译。该行为未定义,因此两种回答都是正确的(好的,允许;任何一种都不允许)。请不要在没有明确说明哪种方式的情况下说“不工作”。在这种情况下,我假设分割错误;但在一个更大的程序或更复杂的问题中,我们可能无法猜测。学究气十足,我认为“两个都不对”比“两个都对”更准确。因为你实际上没有陈述你想做什么,
printf(“%s”,b)
是你的代码的正确等价物。如果您真的需要将指针转换为整数并返回,
size\u t
是一种整数类型,保证具有适当的大小;不要使用
int
作为指针。你不能。C是强类型的;整数是整数,字符串是字符串(那么,指向字符的指针就是指向字符的指针)。打印整数时,不能在
printf
中使用
%s
。可以使用一个变量来保存字符串
10
,该变量可以替换为字符串
“hello”
,也可以使用一个标志来确定是
printf(“%d”,numbervar)
还是
printf(“%s”,stringvar)
。你不能用类型转换来解决这个问题。它不起作用。取出
a=(char*)b
,注意打印的不是
30
。它只是没有抛出一个错误;这并不意味着你的逻辑是正确的。这很难,但我还是不会在堆栈溢出之外聊天。无论如何,请重读我的评论。我知道它会为您打印
hi
,但如果您不从其原始值
30
重新分配
a
,它就不会打印
。如果值不变,您希望它将打印
30
。不会的。您需要
print(“%d”,a)
来打印
30
,而不是
printf(“%s”,a)
。如果您还有其他问题,请询问其他问题。除了我之外,还有很多人会尽自己最大的努力。但请停止尝试获取堆栈溢出外部的联系人。这是不恰当的。虽然我很高兴回答你们在这里提出的问题,但我不是你们的雇员,你们也不能要求我的时间。我不会在gmail上联系你。