Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-\u IOLBF自定义缓冲区不加载单行_C_File_Buffer - Fatal编程技术网

C-\u IOLBF自定义缓冲区不加载单行

C-\u IOLBF自定义缓冲区不加载单行,c,file,buffer,C,File,Buffer,我有一个包含20行30列整数的文本文件。 通过一个C程序,我想创建一个自定义缓冲区并只加载文件的第一行 如果我使用setvbuf在_IOLBF中设置缓冲区模式,为什么我的缓冲区包含整个文件而不仅仅是第一行 #include <stdio.h> int main(void) { char buffer[1024]; FILE * fp; int val; fp = fopen("input.txt", "r");

我有一个包含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("%c\n", buffer[i]);

       return 0;
}
这跟这有关系吗

根据此Microsoft文档:

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


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

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