我正在尝试读取文件并输出内容。一切正常,我可以看到内容,但似乎最后添加了大约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;
答案 0 :(得分:7)
你没有在char数组上放置一个null终止符。这不是ifstream读取太多,cout只是不知道何时停止打印而没有空终止符。
如果你想阅读整个文件,这就容易多了:
std::ostringstream oss;
ifstream fin("index.html");
oss << fin.rdbuf();
std::string html = oss.str();
std::cout << html;
答案 1 :(得分: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;
或者,你可以这样做:
cout.write(html, length);
cout.write
将在length
个字符后完全停止打印。