此代码适用于Windows(Visual Studio),但在Linux GCC上,它会产生不正确的结果。有人能发现问题吗?什么可以在linux vs windows上有所不同?
有没有办法在Linux上编译?我宁愿让它与GCC合作,所以如果你能帮助我发现代码中的问题会在Linux上发挥不同的作用,那将是很棒的。谢谢 -
像这样回来: char输出[8]; char * x =输出; return x;
答案 0 :(得分:1)
char output[8];
char *x = output;
return x;
这是你在程序的很多地方做的事情(这里是asciiToBin
)并调用未定义的行为。您将返回使用自动存储声明的数组的第一个元素的地址。从函数返回时,具有自动存储的对象将被销毁,访问它们会调用未定义的行为。
答案 1 :(得分:1)
首先,您有大量代码返回指向本地数组的指针,这是不允许的,并且当稍后取消引用这些指针时将导致未定义的行为。如果该代码在Windows中有效,那么您只是幸运,因为代码无效。
两种典型的解决方案是:
size_t
长度值以防止覆盖,当然!)到允许被调用函数工作的字符串空间。free()
成为调用者的责任。