C++文件读写(2)fread与fwrite

C++文件读写(2)fread与fwrite,第1张

C++文件读写(2)fread与fwrite

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文件中正确显示写入的字符串,可以自行尝试。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5611238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存