我有一个问题,我不知道如何解决它.问题是:
char * ary = new Char[];
ifstream fle;
fle.open(1.txt, ios_base::binary);
fle.seekg(fle.end);
long count = fle.tellg();
fle.seek(fle.beg);
Run Code Online (Sandbox Code Playgroud)
这是问题:文件1.txt包含:Hello world!.
当我执行时:
ary = new char(count);
fle.read(ary, count);
Run Code Online (Sandbox Code Playgroud)
ary像这样填充:你好世界!@T#^ @ $ @ FF(垃圾)
该文件只是在上面没有任何内容.
平台:赢7,VS 2012
知道如何解决这个问题.(解决了)
(问题2)现在我面临另一个问题,fle.read有时阅读超过我给出的大小.例如,如果我通过像fle.read(缓冲器,1000)它在某些情况下结束(strlen的(缓冲器)= 1500如何可以解决这个问题?
问候,
char [] - C中的字符串通常以null结尾.它们比必要长一个字节,最后一个字节设置为0x00.这是必要的,因为C无法分辨数组的长度.
从文件中读取二进制数据时,不会在字符串中读取终止空字符.这意味着像printf这样的函数在未知长度的char数组上运行,它将输出数组以及恰好在内存中出现的任何数据,直到它遇到空字符.
解决方案:将char [] - 缓冲区分配比数据长度长一个字节,并将最后一个字节设置为0手动.
更好的解决方案:不要使用C风格的char数组.这是面向对象的方式,并使用类std :: string来表示字符串.