C语言中的缓冲区问题?大虾们进,
发布网友
发布时间:2023-09-14 12:34
我来回答
共4个回答
热心网友
时间:2024-12-02 14:19
输出缓冲区:
C标准规定fflush()函数实现,用来刷新输出(stdout)缓存的,对于(stdin)是么有意义的,GCC也不能使用fflush(stdin)来刷新,因为GCC么实现它。
那么为什么要刷新呢,个人认为是这样的
打个比方getchar()函数,我们知道他是从界面读取用户输入的字符,读取之后编译器就把它放在缓存中,当达到一定值的时候,才写入文件什么的,或者我们自己主动调用函数写进去,这个时候如果你还要读取字符到另一个文件中,你会发现这个时候不是你要写入文件的字符,这个时候你就应该刷新下缓存。
打个比较典型的比方:
char p[]={“a”,“b”,“c”};
printf("%d",strlen(p));
我们发现输出的数值不是我们想象的3,为什么,这就是缓存的问题,因为数组p的结束符不是‘/0’,系统会从缓存里面一直读,根据我的理解如果先刷新下缓存,应该就是3了
对于LZ的例子我觉得好像么什么问题,如果要加刷新缓冲,那我觉得可能是,你sleep(1)的时候,其他程序开始占用CPU,导致缓存发生变化,导致输出不正常
刷新缓存在TCP和UDP通讯的时候用的很多,LZ可以看看这方面资料
热心网友
时间:2024-12-02 14:19
int x; for(x=1;x<8;x++) scanf("%c",id[x]); 加 &取地址符 还有你每次scanf后 最好清一下缓冲区
热心网友
时间:2024-12-02 14:20
学习C语言就去败笔网络安全小组,中国最好的C语言论坛
参考资料:百度搜索 败笔网络安全小组
热心网友
时间:2024-12-02 14:20
不同版本区别听微妙的...多运行,加强总结