C - _IOLBF自定义缓冲区不加载单行



我有一个包含 20 行和 30 列整数的文本文件。 通过 C 程序,我想创建一个自定义缓冲区并在其上仅加载文件的第一行。

如果我使用 setvbuf 在_IOLBF中设置缓冲区模式,为什么我的缓冲区包含整个文件而不仅仅是第一行?

#include <stdio.h>
int main(void)
{
char buffer[1024];
FILE * fp;
int val;
fp = fopen("input.txt", "r");
setvbuf(fp, buffer, _IOLBF, 1024);
fscanf(fp, "%d", &val);
printf("Contenuto del buffer: ");
for (int i = 0; i < 1024; i++)
printf("%cn", buffer[i]);
return 0;
}

这和这有什么关系吗?

根据此Microsoft文档:

_IOLBF:对于某些系统,这提供了线路缓冲。但是,对于 Win32,行为与_IOFBF - 完全缓冲相同。

将 C 程序设置为行缓冲区将不起作用

看来你混淆了setvbuf在做什么。通常,它仅以您尝试在输出流上使用它的方式使用。将输入流设置为行缓冲对从中读取的内容没有任何影响,例如,它不会强制读取在行尾停止。这就是面向行的输入函数(如fgets或 POSIXgetline)的用途。

如果要读取第一行整数,请将循环限制为读取30整数,或者如果要将行作为文本读取到缓冲区中,则调用fgets (buffer, sizeof buffer, fp);,缓冲区将包含文件中的第一行。

最新更新