ifstream对象的.read()* char的问题

时间:2014-11-12 20:18:15

标签: c++ istream

我的代码:

ifstream Reader ("commands.txt");
if(Reader.fail())
{

    error("File \"commands.txt\" could not be found or opened.\n");

}

Reader.seekg(0, Reader.end);
int FSize = Reader.tellg();

if(FSize == 0)
{

    cout << "File \"commands.txt\" is empty.\n";
    return 0;

}

char * ContentsHold = {};
Reader.read(ContentsHold, FSize);
Reader.close();

string Contents(ContentsHold);

最后,内容应该是一个c ++字符串,用于保存commands.txt中的所有内容。我收到错误&#34; basic_string :: _ S_construct null无效&#34;。我无法弄清楚出了什么问题。帮助

1 个答案:

答案 0 :(得分:0)

你有什么,

char* ContentsHold = {};

声明一个指向使用null常量初始化的字符的指针。这不是指向数组第一个元素的指针,您必须使用new[]语法:

char* ContentsHold = new char[FSize];

这将创建一个数组,ContentsHold将指向其第一个元素。更好的方法是使用std::string并公开其第一个元素的地址:

std::string ContentsHold(FSize);
Reader.read(&ContentsHold[0], FSize);

这样您就不必担心删除新内存了。