Windows与Linux上的C - 差异

时间:2014-04-14 09:22:26

标签: c linux gcc window

此代码适用于Windows(Visual Studio),但在Linux GCC上,它会产生不正确的结果。有人能发现问题吗?什么可以在linux vs windows上有所不同?

有没有办法在Linux上编译?我宁愿让它与GCC合作,所以如果你能帮助我发现代码中的问题会在Linux上发挥不同的作用,那将是很棒的。谢谢 -

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

首先,您有大量代码返回指向本地数组的指针,这是不允许的,并且当稍后取消引用这些指针时将导致未定义的行为。如果该代码在Windows中有效,那么您只是幸运,因为代码无效。

两种典型的解决方案是:

  1. 让调用者传入指针(和size_t长度值以防止覆盖,当然!)到允许被调用函数工作的字符串空间。
  2. 为函数内的字符串动态分配新内存并返回该内存。当{9}不再需要记忆时,free()成为调用者的责任。