You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Windows专属fopen_s代码修改为macOS可兼容的fopen实现求助

macOS下fopen_s编译错误解决方法

报错翻译

你收到的编译报错:implicit declaration of function 'fopen_s' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
中文含义为:C99标准不允许隐式声明fopen_s函数

错误原因

fopen_s是Windows平台专属的安全IO函数,不属于标准C语言规范,macOS自带的Clang编译器未实现该函数,因此编译失败。

代码修改方案

使用标准C库的fopen函数替换即可,以下是和原逻辑完全兼容的替换代码:

// 需要先引入errno.h头文件才能获取错误码
#include <errno.h>

// 替换原fopen_s打开audio.txt读的代码
FILE* fp_in = fopen("audio.txt", "r");
errno_t err_in = fp_in == NULL ? errno : 0;

// 替换原fopen_s打开hpf.txt写的代码
FILE* fp_out = fopen("hpf.txt", "w");
errno_t err_out = fp_out == NULL ? errno : 0;

注意事项

  • 原代码中后续对err_in、err_out的错误判断逻辑无需改动,和fopen_s的返回值逻辑完全一致,0代表打开成功,非0代表对应错误码
  • 如果你不需要保留err_in、err_out变量,也可以直接判断文件指针是否为空来做错误处理,写法更简洁:
FILE* fp_in = fopen("audio.txt", "r");
if (fp_in == NULL) {
    // 此处写入打开失败的处理逻辑,如打印错误、退出程序
}

FILE* fp_out = fopen("hpf.txt", "w");
if (fp_out == NULL) {
    // 此处写入打开失败的处理逻辑
}
  • 文件使用完毕后仍需调用fclose关闭指针,和原逻辑一致

内容的提问来源于stack exchange,提问作者p20xx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:36:03