2014-04-14 73 views
-2

此代码适用于Windows(Visual Studio),但在Linux GCC上,它会产生不正确的结果。有人可以发现问题吗?什么可以在Linux和Windows上以不同的方式工作?Windows与Linux的差异 - 差异

有没有办法在Linux上编译它?我宁愿让它与GCC一起工作,所以如果你能帮我发现代码中的问题,这些问题在Linux上的表现会有所不同,那就太好了。谢谢 -

像这样返回: char output [8]; char * x =输出; return x;

+3

你不能认真地期望对这段代码量进行免费评论,对这个问题有如此模糊的“描述”?! – unwind

+0

示例输入文件在哪里?什么是预期的输出?你究竟得到了什么? –

+0

谢谢李,输入将是简单的汇编代码:移动ax,bx和输出应该是:89 d8(十六进制)或二进制,它应该是:10001001 11011000 – user3530178

回答

1

首先,你有足够的代码返回指向本地数组的指针,这是不允许的,当这些指针稍后被去引用时会导致未定义的行为。如果该代码在Windows中正常工作,则代码无效即可幸运。

两个典型的解决方案是:

  1. 有一个指针主叫通(和size_t长度值以防止改写,当然!)到被调用的功能允许工作字符串空间。
  2. 为函数内部的字符串动态分配新内存并返回该内存。当记忆不再需要时,free()成为调用者的责任。
+0

感谢您的回复。我可以分配内存并返回它,而不是指针吗?你会建议什么? – user3530178

+0

传递一个指针,感谢这个想法。我会尝试。 – user3530178

1
 char output[8]; 
     char *x = output; 
     return x; 

这是你在你的很多程序(asciiToBin这里)的地方正在做的事情,并调用未定义的行为。您正在返回使用自动存储声明的数组的第一个元素的地址。从函数返回时,具有自动存储的对象将被销毁,并访问它们将调用未定义的行为。

+0

感谢您的回复。你会建议如何避免这个问题? – user3530178

+0

@ user3530178例如,您可以将输出数组(通过指针)传递给函数 – ouah

+0

感谢@ouah,我会尝试进行更改。如果您发现其他问题,请发表评论。 – user3530178