文件处理I / O c ++错误

时间:2017-12-06 19:26:35

标签: c++ c++11 c++14

  

这是我试图运行的代码。编译器显示一些警告,即变量'p'可能未被初始化使用。   并且..在运行它有一个问题..我会显示..下面。   请纠正我并解释。   谢谢。   execution of code   *   code   那个错误就是......输出的字符数组的前两个元素有些搞砸!!! *

#include<bits/stdc++.h>
using namespace std;
class file{
public:int a;
char* name;
public:
file(int x,char* b):a(x){name=b;}
void printfile(){cout<<a<<" "<<name<<endl;}
};
int main(){
char *p;
int x=10;
cout<<"enter a name"<<endl;
cin>>p;
file k(x,p);
ofstream f("file",ios::out|ios::binary);
f.write((char*)&k,sizeof(class file));
f.close();
ifstream of("file",ios::in|ios::binary);
file o(0,'\0');
of.read((char*)&o,sizeof(class file));
o.printfile();
of.close();
return 1;
}

2 个答案:

答案 0 :(得分:0)

你有p作为一些指针。谁将分配指针指向的内存?
在C中,调用者几乎总是负责在调用之前分配任何缓冲区 如果您不想,请改用std :: string。

答案 1 :(得分:0)

首先,我建议您阅读一些关于c ++指针和内存处理的基本手册,以便您更好地理解问题的根源。

您的代码中存在两个主要问题。 第一个是您正在创建一个未连接到任何已分配内存的指针。简单来说,您要求访问内存地址而不要求系统为您保留。

此外,在该存储器位置中,已经存储了任何位配置。变量的初始化是为一块内存提供一些具有有意义解释的数据的任务。在这种特殊情况下,我甚至不确定char *的插播运算符应该做什么。他可能会在最后一个不是0或行尾的字符后附加你的字符。