gpt4 book ai didi

文件末尾的 C++ 垃圾

转载 作者:太空宇宙 更新时间:2023-11-04 14:39:24 29 4
gpt4 key购买 nike

我有一个问题,我不知道如何解决。问题是:

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);

问题来了:文件 1.txt 包含:Hello world!。

当我执行时:

ary = new char(count);
fle.read(ary, count);

ary 是这样填充的:Hello world! @T#^@$@FF(垃圾)

文件没问题,里面什么都没有,只有上面的。

平台:Win 7、VS 2012

知道如何解决这个问题。 (已解决)

(问题 2)现在我面临另一个问题,fle.read 有时会读取比我给定的大小更多的内容。例如,如果我像 fle.read(buffer, 1000) 这样传递,它在某些情况下会结束 (strlen(buffer) = 1500。我该如何解决这个问题?

问候,

最佳答案

C 中的 char[] 字符串通常以 null 结尾。它们比必要的长一个字节,最后一个字节设置为 0x00。这是必要的,因为 C 无法判断数组的长度。

当您从文件中读取二进制数据时,不会将终止空字符读入字符串。这意味着像 printf 这样对未知长度的字符数组进行操作的函数将输出数组和内存中恰好在它之后的任何数据,直到它遇到空字符。

解决方案:分配比数据长度长一个字节的 char[]-buffer,并手动将最后一个字节设置为 0

更好的解决方案: 不要使用 C 风格的字符数组。以面向对象的方式进行并使用类 std::string来表示字符串。

关于文件末尾的 C++ 垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19247443/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com