sách gpt4 ai đã đi

文件末尾的 C++ 垃圾

In lại 作者:太空宇宙 更新时间:2023-11-04 14:39:24 30 4
mua khóa gpt4 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。我该如何解决这个问题?

问候,

1 Câu trả lời

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

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

Giải pháp:分配比数据长度长一个字节的 char[]-buffer,并手动将最后一个字节设置为 0.

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

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

30 4 0
Bài viết được đề xuất: html - 如何将 jQuery UI 按钮水平对齐到 div?
Bài viết được đề xuất: c++ - 为什么我们不能在 for 循环中声明两个变量?
Bài viết được đề xuất: javascript - id 和 class 对象的长度之间的差异
Bài viết được đề xuất: c++ - 用 malloc 替换 operator new
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com