FILE* file_;
char buffer[5];
file_ = fopen("Data.txt", "a+");
while (!feof(file_))
{
fread(buffer, sizeof(buffer), 1, file_);
cout << buffer<<" ";
BM(buffer, pat);
}
Data.txt="ABCC1ABCC2XXX"
输出:
ABCC1m
ABCC2m
XXXC2米
如何让缓冲区在开始从之前的缓冲区生成字符之前停止?(粗体部分)
想要的输出:
ABCC1
ABCC2
XXX
最佳答案
你有两个问题。首先你不是空终止 buffer
根本没有,(这就是为什么你得到 m
输出。其次,当有一个简短的阅读时,你没有在正确的地方以 null 终止 buffer
。
fread
会告诉你它读了多少个字符,你需要把'\0'
那里。 编辑 之前的描述不准确。它会告诉您它已读取了多少个对象,每个对象的大小为 arg2,而您最多读取了 arg3 个。您需要将参数更改为 fread
这样您就可以读取单个字符,并且它们的数量与缓冲区中的空间一样多。所以:
FILE* file_;
char buffer[5+1];
file_ = fopen("Data.txt", "a+");
while (!feof(file_))
{
const size_t nchars = fread(buffer, 1, sizeof(buffer)-1, file_);
buffer[nchars] = '\0';
cout << buffer<<" ";
BM(buffer, pat);
}
学究笔记:fread
的第二个参数也可以写成 sizeof(buffer[0])
如果缓冲区不是 char
/signed char
/unsigned char
- 但是这三个定义的大小为 1。
关于c++ - 缓冲区用不需要的数据填充 char 数组中的最后一个空白区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339097/