Windows 上的 C 与 Linux 上的 C - 差异

标签 c linux gcc window

此代码适用于 Windows (Visual studio),但在 Linux GCC 上,它会产生不正确的结果。有人能发现问题吗? Linux 与 Windows 上的工作方式有何不同?

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

像这样返回: 字符输出[8]; 字符 *x = 输出; 返回x;

最佳答案

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

两种典型的解决方案是:

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

关于Windows 上的 C 与 Linux 上的 C - 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056422/

相关文章:

在 C 中复制对数组的引用

c++ - 如何在后续流程启动时确保 RNG 的唯一种子?

c - 如何在巨型循环中使用 GDB

gcc - 使用 libnids 编译

c - 如何初始化一个未知长度的数组?

c - 使用 union 和函数指针在 C 中实现函数委托(delegate)

c - localtime(_r) 反转行为

java - 使用 Java 清除控制台

c - '\' 在 C 中实际上做了什么?

c++ - 使用和不使用 std=c++0x 混合库的任何问题