首先,我正常写出了这样一段代码:

#include<stdio.h>
int main() {
	FILE* fp = fopen("C:\\c语言2026\\Project3\\test.txt", "w");
	//检验是否成功打开
	if (fp == NULL) {
		perror("fopen");
		return 1;
	}
	else {
		printf("打开文件成功");
	}
	
	fclose(fp);
	fp=NULL;
	return 0;
}

第一个问题:

但是vs2026下面提示信息告诉我fopen可能不安全,得加上_CRT_SECURE_NO_WARNINGS,于是我加上

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	FILE* fp = fopen("C:\\c语言vs2026\\Project3\\test.txt", "w");
	//检验是否成功打开
	if (fp == NULL) {
		perror("fopen");
		return 1;
	}
	else {
		printf("打开文件成功");
	}
	
	fclose(fp);
	fp=NULL;
	return 0;
}

第二个问题:

但是它不能运行,告诉我no such file or directory

我问了deepseek之后,知道了fopen里面不能含中文

于是我改成第三版:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	FILE* fp = fopen("C:\\c_vs2026\\Project3\\test.txt", "w");
	//检验是否成功打开
	if (fp == NULL) {
		perror("fopen");
		return 1;
	}
	else {
		printf("打开文件成功");
	}
	
	fclose(fp);
	fp=NULL;
	return 0;
}

第三个问题:

这次没有输出错误,但是程序并没有像我所想输出"打开文件成功",它输出了一堆乱码。

这个是运行成功了还是失败了?我要搞清楚一下。

咨询了DeepSeek之后,我进行验证

验证:

我加入了putc进行验证

代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	FILE* fp = fopen("C:\\c_vs2026\\Project3\\test.txt", "w");
	//检验是否成功打开
	if (fp == NULL) {
		perror("fopen");
		return 1;
	}
	else {
		printf("打开文件成功");
	}
	putc('a', fp);
	putc('b', fp);

	fclose(fp);
	fp=NULL;
	return 0;
}

运行之后

文件里有'a'和'b',事实证明文件打开与写入成功了!

那为什么会是乱码呢?

咨询了deepseek之后,它说可能是中文编码不匹配,让我试下英文success来进行验证

验证成功,文件打开与写入就是可以的,是中文汉字的原因。

那我如果非要使用汉字,怎么解决呢?

咨询deepseek后,我进一步改进

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int main() {
	system("chcp 65001 > nul");
	FILE* fp = fopen("C:\\c_vs2026\\Project3\\test.txt", "w");
	//检验是否成功打开
	if (fp == NULL) {
		perror("fopen");
		return 1;
	}
	else {
		printf("文件打开成功");
	}
	putc('a', fp);
	putc('b', fp);

	fclose(fp);
	fp=NULL;
	return 0;
}

终于,成功!

我又想到:这个是乱码的更深层原因是什么?因为我平常写的中文不会输出乱码。

我打算运行一个及其简单的printf进行验证


#include<stdio.h>
int main(){

printf("打开文件成功");
return 0;
}

竟然也是乱码,说明是更深层的原因!

原来正常的也不行了,我必须做出更改。

总不能每次都要加system吧。

deepseek告诉我这个原因是:{vs自作聪明把简体中文那个编码改了,于是出现乱码。

}

咨询deepseek后,我进行更改。

(deepseek给出的答案:

一劳永逸的解决方案

手动把文件编码改成 GBK,以后就永远正常了:

1. 在 VS 里打开你的 .c 文件
2. 点击菜单 文件 → 另存为
3. 点击保存按钮旁边的小箭头 → 选择 “编码保存”
4. 在弹出的窗口里,选择 “简体中文(GB2312) - 代码页 936”
5. 点击 确定,然后覆盖保存
6. 重新运行程序

改完后,删去system,运行程序进行验证

成功了!

然后我又看了下新项目中文有没有遇到变成乱码这种问题。

刚开始是也有这种问题,但是我把源文件删了之后再新建一个就没有问题了。

至此,文件打开过程中的全部问题都得到了解决。

如果后续再遇到问题,我再补一个后续。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐