今天在Linux程序设计的时候需要清空标准输入缓冲区,于是使用了如下Windows程序设计中的方法:
1.fflush(stdin);这个fflush()函数根本不是标准C中的函数,只是标准C的扩展,所以在Linux中使用根本不行;
2.中网上搜索了下,发现有网友建议使用rewind(stdin);这个函数其实是将指针指向流的开始处。但是它是文件操作中的一个函数,操作的是FILE型流,在Windows程序设计中是可以清空标准输入缓冲区的,但是在Linux中不行。
3.通过读完标准缓冲区中的剩余字符并丢弃掉来清空标准缓冲区,使用的函数是getchar(),此函数的作用是从标准输入缓冲区中读出一个字符,此方法中Linux中可行。
如果需要清除stdin可以通过如下循环实现:
char ch;
while((ch=getchar())!='/n'&&ch!=EOF);
以上语句将清除stdin中的字符,知道遇到换行符或者是读完缓冲区。
以上的方法均可以在Windows程序设计中用来清除缓冲区;
4.在Linux程序设计中也还是有一种用来清空stdin中的方法,直接调用如下的函数:
setbuf(stdin, NULL);
此函数我还没有来得及测试;
通过以上分析,在Linux下清空stdin用两种方法:
1.通过读取剩余的字符并丢弃掉;
char ch;
while((ch=getchar())!='/n'&&ch!=EOF);
或者是:
char s[1024];
fgets(s,1024,stdin);
2.使用函数setbuf(stdin,NULL);
以上跟大家分享,如有更好的方法请指出,谢谢。
来自:http://blog.csdn.net/wesleyluo/article/details/4823858
linux下C语言实现动态分配的缓冲区保存多个ascii码字符串首地址 :
操作系统:ubuntu10.04
前言
很多时候,pc控制下位机,都是通过串口或web,多以ascii码直接通信。在数据较少时,可直接申请一个缓冲区,发送所需数据;但是在很多时候,发送的数据会非常大,直接申请一个非常大的缓冲区并不是一个好的方法。因此可以申请一个小的缓冲区,然后把各个ascii字符串的首地址复制到该缓冲区中,然后发送时,循环读取这个缓冲区的地址内容,发送ascii码字符串。
一,实现 vi bufferarea.c
#include
#include
#include
char *s1 = "hello world\n";
char *s2 = "wo shi zhong guo ren\n";
char *s3 = "i am a chinese\n";
void *data = NULL;
void init_data(void)
{
char **ptr = ((char**)data);
(*ptr) = s1;
printf("1 %p,%p,%s\n",ptr,s1,*ptr);
++ptr;
(*ptr) = s2;
printf("2 %p,%p,%s\n",ptr,s2,*ptr);
++ptr;
(*ptr) = s3;
printf("3 %p,%p,%s\n",ptr,s3,*ptr);
++ptr;
ptr = NULL;
printf("data1 %x\n",*(int*)data);
}
void show_data(void)
{
char **ptr = (char**)data;
while((*ptr) != NULL)
{
printf("%s\n",*ptr);
++ptr;
}
}
int main(void)
{
data = malloc(256);
memset(data,0,256);
printf("alloc success\n");
init_data();
printf("init success\n");
show_data();
free(data);
printf("free success\n");
return 0;
}
二,结果
[root@jackxiang bufferarea]# vi bufferarea.c
[root@jackxiang bufferarea]# make bufferarea
cc bufferarea.c -o bufferarea
[root@jackxiang bufferarea]# ./bufferarea
alloc success
1 0x75b010,0x400878,hello world
2 0x75b018,0x400885,wo shi zhong guo ren
3 0x75b020,0x40089b,i am a chinese
data1 400878
init success
hello world
wo shi zhong guo ren
i am a chinese
free success
来自:http://blog.chinaunix.net/uid-28458801-id-4297123.html
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7366/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表