C++ Ifstream读得太多了?

Kra*_*ffs 2 html c++ file char ifstream

我正在尝试读取文件并输出内容.一切正常,我可以看到内容,但似乎最后添加了大约14个空字节.有谁知道这段代码有什么问题吗?

                    int length;
                    char * html;


                    ifstream is;
                    is.open ("index.html");
                    is.seekg (0, ios::end);
                    length = is.tellg();
                    is.seekg (0, ios::beg);
                    html = new char [length];

                    is.read(html, length);
                    is.close();
                    cout << html;
                    delete[] html;
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 7

你没有在char数组上放置一个null终止符.这不是ifstream读取太多,cout只是不知道何时停止打印没有null终止符.

如果您想要读取整个文件,这会更容易:

std::ostringstream oss;
ifstream fin("index.html");
oss << fin.rdbuf();
std::string html = oss.str();
std::cout << html;
Run Code Online (Sandbox Code Playgroud)


Naw*_*waz 5

这是因为html它不是以空std::cout字符结尾的字符串,并且一直保持打印字符直到它找到\0,否则它可能会使程序崩溃

做这个:

html = new char [length +1 ];

is.read(html, length);
html[length] = '\0'; // put null at the end
is.close();
cout << html;
Run Code Online (Sandbox Code Playgroud)

或者,你可以这样做:

cout.write(html, length);
Run Code Online (Sandbox Code Playgroud)

cout.write将在length多个字符后完全停止打印.