标题:用setvbuf设置缓冲区的问题,好难理解啊!!!!!
只看楼主
至尊幽蓝
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2015-7-30
结帖率:0
 问题点数:0 回复次数:0 
用setvbuf设置缓冲区的问题,好难理解啊!!!!!
我首先建立了一个文件,26字母写了5行,关闭重新打开,设置缓冲区为行缓冲。
读取数据时,我并没有发现它变现出行缓冲的特性啊,话说行缓冲到底是什么意思啊?
而且缓冲区的数据也不对啊,读完第一遍A-Z后,又读出ABB才结束,谁能告诉我这些都是怎么回事啊,我自学的,好多不懂,谢谢了。
程序代码:
#include <stdio.h>
int main(void)
{
    FILE * F1,* F2;
    char buff[31] = { 0 };    //定义缓存数组,初始化为0,定义31个,后面会写入30个,保留最后一位空字符
    char ar[30] = "ABC.txt";  //文件1
    char br[30] = "def.txt";  //文件2
    char temp[30] = { 0 };    //字符数组,初始化为0

    if ((F1 = fopen(ar, "w")) == NULL)   //第一次打开文件1,“w“  ,用标准缓存
    {
        fputs("Can't open file 1 for \"w\".", stderr);
        exit(1);
    }
    for (int j = 0; j < 5; j++)         //写文件:26个字母写5行
    {
        for (int i = 0; i < 26; i++)
            putc('A' + i, F1);
        putc('\n', F1);
    }
    fclose(F1);                        //关闭文件

    if ((F1 = fopen(ar, "r")) == NULL)  //第二次打开文件1,“r”
    {
        fputs("Can't open file 1 for \"r\".", stderr);
        exit(2);
    }

    setvbuf(F1, buff, _IOLBF, 30);    //设置缓存,大小30

    fgets(temp, 11, F1);            //从文件1读取10个字符到temp

    puts("temp 1:");
    for (int i = 0; i < 30; i++)   //打印temp中30个字符
        printf("%c", temp[i]);
    printf("0");                   //用0标记打印结束的位置
    printf("\n");

    puts("buff 1:");
    for (int i = 0; i < 30; i++)    //打印buff中的30个字符
        printf("%c", buff[i]);
    printf("0");                   //因为会有回车符,用0标记打印结束的位置
    printf("\n");


    fgets(temp, 18, F1);            //再次从文件1读取,这次读取17个字符到temp,
                                    //也就是读到第一个换行符,希望会刷新缓存

    puts("\ntemp 2:");
    for (int i = 0; i < 30; i++)   //打印temp中30个字符
        printf("%c", temp[i]);
    printf("0");
    printf("\n");

    puts("buff 2:");
    for (int i = 0; i < 30; i++)    //打印buff中的30个字符
        printf("%c", buff[i]);
    printf("0");
    printf("\n");



    if ((F2 = fopen(br, "w")) == NULL)     //打开文件2,“w”
    {
        puts("Can't open file 2 for \"w\".");
        exit(3);
    }
    fputs(buff,F2);                //将buff中的字符串输入F2
    fclose(F2);                    //关闭F2,刷新缓存
    while (1);

    return 0;
}


搜索更多相关主题的帖子: 字母 而且 缓冲区 
2015-07-30 19:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-455931-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018617 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved