0. 头文件与命名空间
在vs中直接使用fopen函数会报错,需在项目->属性->c/c++->预处理器->点击预处理器定义中添加 _CRT_SECURE_NO_WARNING
#include#include // 在项目->属性->c/c++->预处理器->点击预处理器定义中添加 _CRT_SECURE_NO_WARNINGS using namespace std;
1. 文件读写实现
很简单,直接写,但是有一些细节需要注意,注释中详细解释
int main() {
// 读取文件,fopen的使用需将路径转化为c字符串的形式
string filename = "test.txt";
FILE * file1 = fopen(filename.c_str(), "w");
// 定义字符串,方式1
//string h1 = "hello world1";
//string h2 = "hello world2";
//string h3 = "hello world3";
//string h4 = "hello world4";
// 定义字符串,方式2
char* h1 = "hello world1";
char* h2 = "hello world2";
char* h3 = "hello world3";
char* h4 = "hello world4";
// 写入文件,参数依次为:
// 写入内容,需要传入地址
// 写入元素的大小(以字节为单位)
// 写入元素的个数,每个元素的大小为上行所述大小
// 被写入的文件
// "hello world1"的长度为12+结尾的 ,正好为13
// string默认为32字节,所以不可以用sizeof(string)
fwrite(h1, sizeof("hello world1"), 1, file1);
fwrite(h2, sizeof("hello world2"), 1, file1);
fwrite(h3, 13, 1, file1);
fwrite(h4, 13, 1, file1);
fclose(file1);
FILE* file2 = fopen(filename.c_str(), "r");
//char* r1 = new char[13];
//char* r2 = new char[13];
//char* r3 = new char[13];
//char* r4 = new char[13];
// 不预先定义字符串内容会导致读出有问题
string r1 = "abcdefghigkl";
string r2 = "abcdefghigkl";
string r3 = "abcdefghigkl";
string r4 = "abcdefghigkl";
// 参数同fwrite
fread(&r1, sizeof("hello world1"), 1, file2);
fread(&r2, sizeof("hello world2"), 1, file2);
fread(&r3, sizeof("hello world3"), 1, file2);
fread(&r4, sizeof("hello world4"), 1, file2);
fclose(file2);
// 输出结果,即使是字符串指针类型的r1也同样采用下列输出方式
// 在C++中有对<<进行重载,打印字符串指针时输出的不是地址,而是字符串
cout << r1 << endl;
cout << r2 << endl;
cout << r3 << endl;
cout << r4 << endl;
return 0;
}
2. 结果显示
3. 注意
1. 文件读写时txt文件内的内容可能为乱码,但并不影响读写,只需要记住自己的写入内容,需要时按照写入内容的长度依次读出即可;
2. 在字符串后加入n时可以在txt文件中正确显示写入的字符串,可以自行尝试。



