在链表上写入和读取 fstream 的函数
Write and Read functions of fstream on a linked list
我对文件处理的概念很陌生。我正在尝试制作一个待办事项列表,该列表可以跟踪文件中的每次修改。我不确定如何实现这一点,所以我做了一个简单的链表,并尝试读取和写入文件,但我失败了。 这是我的代码 ->
#include <iostream>
#include <fstream>
struct node{
int val;
node *next = NULL;
};
void add(node *&head, int val){
node *newPtr = new node;
if(head==NULL){
newPtr->val = val;
head = newPtr;
}
else{
newPtr->val = val;
newPtr->next = head;
head = newPtr;
}
}
void print(node *head){
node *temp;
temp = head;
while(temp!=0){
std::cout << (*temp).val << " ";
temp = temp->next;
}
std::cout << std::endl;
}
int main(){
node *head = NULL;
int val;
std::ofstream filout;
filout.open("data.txt",std::ios::out|std::ios::app|std::ios::binary);
while(true){
std::cin>>val;
if(val==0)
break;
else{
add(head,val);
filout.write((char*)&head, sizeof(head));
}
}
std::ifstream filin;
filin.open("data.txt",std::ios::in|std::ios::binary);
filin.read((char*)&head, sizeof(head));
print(head);
return 0;
}
我应该对我的代码进行哪些修改才能正确处理?
更新:
当我第一次尝试执行程序时,我可以轻松地插入一些值并通过键入 0 来终止程序,一切都很好。但是一旦我第二次运行该程序,我的打印功能就会EXC_BAD_ACCESS error
std::cout
语句
好的,让我们一步一步来。
在 std::ios::out|std::ios:- :app|std::ios::二进制模式下打开文件意味着:
- 输出
- 追加(打开文件并查找到最后(
- 二进制(关于行尾的东西,最好谷歌一下(
- 读取数据并存储数据
- 读取值
- 将其添加到列表
- 存储在文件中(注意:
filout.write((char*)&head, sizeof(head));
将节点的地址存储在内存中(
- 打开文件进行读取(无需关闭!(并将第一个值读取到head中。
因此,在第二次启动后,您读取头节点的第一个地址。
一些建议:
- 从不做事涉及在 C++ 中将数据强制转换为 char* 而不必要
- 切勿将内存地址存储在文件中(它们在重新分配后无用甚至有危险(
- 序列化结构来存储它(如谷歌/protobuf(
相关文章:
- 使 std::fstream 写入文件末尾,但从头开始读取
- 如何使用单个fstream创建、读取和写入文件
- 如何在 c++ 中使用 fstream 读取.txt文件
- 在链表上写入和读取 fstream 的函数
- 使用 fstream 读取 csv,并且只阅读 fstream
- FSTREAM的问题读取确定,但不编写用户输入字符串
- C++ fstream 不会读取整个文件
- Fstream 在点击 EOF 时读取行为
- 如何在 c++ 中同时使用 'fstream' 写入和读取文件
- 使用fstream用中文/日文编写的文本,无法正确读取文件
- 使用 fstream 读取文件后,我无法立即写入文件
- 无法使用 fstream 从二进制文件中读取字符串,而是显示奇怪的符号
- 如果在类 temlpate 中使用,fstream 是否会在编译时通过读取和写入来访问 hardrive?
- C 从文件中读取FSTREAM数据不会返回正确的值.inputfile.tellg返回-1
- 无法使用 fstream 和 ifstream 读取 NDK C++中的文件
- CMD窗口停止工作,文本文件使用fstream读取错误
- 使用fstream从二进制文件中读取并将结果存储在向量中
- 从 fstream 中读取后,为什么它似乎需要在写入之前清除它的好位
- 从文件中读取一行并将其放入字符串中(使用 fstream)
- 读取,操纵和写入C 文档,主要使用FSTREAM和数组