Visual Studio 2017中fopen_s运行时错误求助
解决fopen_s打开文件时的断言失败问题
嘿,这个问题一眼就能看出来——你在fopen_s的文件打开模式里把字符集参数的拼写写错了!你写的是"r,css=UTF-8",但正确的应该是"r,ccs=UTF-8"。这里的ccs是**Character Set Specification(字符集规范)**的缩写,拼写错误直接导致了无效的模式,触发了CRT的断言检查。
修正后的完整代码
#include<stdio.h> int main() { FILE* fp = NULL; // 先接收fopen_s的返回值,判断文件是否成功打开 errno_t open_err = fopen_s(&fp, "input.txt", "r,ccs=UTF-8"); if (open_err == 0 && fp != NULL) { // 文件成功打开后再执行关闭操作 fclose(fp); } else { // 可以打印错误码帮助排查问题 printf("文件打开失败,错误码:%d\n", open_err); } return 0; }
几个额外的小建议
- 永远不要忽略
fopen_s的返回值:它返回errno_t类型的错误码,0代表打开成功,非0则是对应错误。如果跳过检查,当文件不存在或权限不足时fp会是NULL,直接调用fclose(fp)会引发未定义行为。 ccs是微软CRT的特有扩展,只有在Windows平台的VS环境下才有效,如果你需要跨平台代码,建议用其他方式处理字符编码。
内容的提问来源于stack exchange,提问作者Kicr
相关产品推荐
相关产品推荐

