C语言中清除内存缓冲区的函数是什么??

还有什么常用的易错的函数,如fflush(stdin)之类的

是I/O 函数分为“带缓冲”的和“不带缓冲”的两类。

带缓冲的 I/O 函数写数据时,并不直接写磁盘介质,而是将数据先写到这块内存缓冲中,之后用户空间缓冲中的数据会被传送到系统缓冲中。

linux 内核会将系统缓冲中的数据送完磁盘驱动器(fsync函数可以加速这一过程),这之后,数据才真正的被写入磁盘。

因为目前内存的读写速度往往远大于硬盘的读写速度(常 ms 级)。因此,缓冲区的建立可以尽力避免太过频繁的写磁盘。

对于硬盘来说,写入一个字节可能跟写入一个扇区没什么两样,程序员每次写入的数据也许就几个字节,所以可以将每次写入的几个字节放入缓冲区,排列组合成一整块数据再写入,也能极大的提升效率。

扩展资料

1、带缓冲的 I/O 读函数读取数据之前,则会首先判断用户空间的进程缓冲区是否包含数据,如果没有,则继续判断系统缓冲区是否包含数据。

2、“带缓冲”的 I/O 读函数从磁盘读取数据时,并不只读取调用者指定的读取字节数。读函数可能一次性读取一个扇区(常常是 512B)保存在缓冲区里,只返回给程序员需要的 10 字节。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-26

C语言中清除内存缓冲区的函数是fflush( ),清除输入缓冲区用fflush(stdin); 其中stdin表示标准输入。

该函数通常用在输入类函数的前面,用以清除输入缓冲区中的内容,避免接收到上次残留的内容而出错。


举例如下:

1、不加fflush函数:

// 将输入的5个字符存放到数组str中,并输出
int i;
char ch, str[6]={'\0'};
for(i=0; i<5; i++)
{
    scanf("%c", &ch);
    str[i] = ch;
}
printf("%s\n", str);

// 程序只能输入三个字符(每个字符间包含一个回车符),因为不加fflush函数时,将残留在缓冲区中的回车符也当成了一个字符输入到数组str中。


2、加fflush函数:

int i;
char ch, str[6]={'\0'};
for(i=0; i<5; i++)
{
    fflush(stdin);  // 清除留在缓冲区中的回车符,确保接收到的是用户输入的字符
    scanf("%c", &ch);
    str[i] = ch;
}
printf("%s\n", str);

// 程序能正常输出

第2个回答  2012-08-20
是fflush()
第3个回答  2009-10-30
free()?本回答被提问者采纳
相似回答