我使用下面的代码从二进制文件n
字符复制到char*
变量未定义行为:C++的IStream ::读取时
std::ifstream is ("write.abc", std::ifstream::binary);
if (is) {
// get length of file:
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
char * buffer = new char [length];
std::cout << "Reading " << length << " characters... ";
// read data as a block:
is.read (buffer,length);
std::cout << "length of buffer: "<<strlen(buffer) <<endl;
std::cout << "Content of buffer: "<<buffer <<endl;
.......
我的文件的内容:
这是汇编的结果:
我的任务离子如下:我等着有:缓冲的13
内容:
缓冲区的长度abcdefghjklmn
能有一个人,请帮我解释结果?
你忘了你的“弦”这是strlen的使用,以确定该字符串的结尾的结尾\ 0分配空间。 – Borgleader 2014-09-26 14:29:28
您需要分配length + 1个字符,并在读取后在'buffer [length]'中放入'\ 0'。 – Kiroxas 2014-09-26 14:29:30
如果您只想遍历缓冲区,您也可以使用[begin,end]方法,其中'end = begin + length + 1' – Felics 2014-09-26 14:40:56