此代码适用于 Windows (Visual studio),但在 Linux GCC 上,它会产生不正确的结果。有人能发现问题吗? Linux 与 Windows 上的工作方式有何不同?
有没有办法在Linux上编译这个?我宁愿让它与 GCC 一起工作,所以如果你能帮助我发现代码中在 Linux 上表现不同的问题,那就太好了。谢谢-
像这样返回: 字符输出[8]; 字符 *x = 输出; 返回x;
最佳答案
首先,您有大量代码返回指向本地数组的指针,这是不允许的,并且在稍后取消引用这些指针时会导致未定义的行为。如果该代码在 Windows 中有效,那么您很幸运,因为该代码无效。
两种典型的解决方案是:
- 让调用者传入一个指针(当然还有
size_t
长度值以防止覆盖!)到允许被调用函数工作的字符串空间。 - 为函数内的字符串动态分配新内存并返回。当不再需要该内存时,调用者有责任
free()
释放该内存。
关于Windows 上的 C 与 Linux 上的 C - 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056422/