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文件中正确显示写入的字符串,可以自行尝试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)