嵌入式每日学习心得2017.07.21

来源:互联网 发布:知乎 vmwarehorizon 编辑:程序博客网 时间:2024/05/29 17:31
缓冲区


在数据输入时,如果输入有误,往往需要清空缓冲区,以保证下次输入的准确可靠。


    在Linux系统中,有时会惯性思维,使用在Windows程序设计中常用的方法:
(1)fflush(stdin):
fflush()函数,不是标准c库中的,只是标准c的扩展,所以在Linux中,不行。


(2)rewind(stdin):
这个函数是将指针指向流的开始位置,但它是文件io中的一个函数,操作的是FILE型流。在Linux中不行。


(3)getchar():
while(getchar()!='\n')
 ;
通过读取stdin中的剩余数据并丢弃,来清空缓冲区。getchar()一次读一个字符,在Linux中,可行!


(4)setbuf(stdin,NULL):
通过调用函数,直接将缓冲区清空(置空或指空)。在Linux中可行!(一次性)


(5)fgets():
char zmx[1024];
fgets(s,1024,stdin);




在linux 中,可行的方案,只有(3)、(4)、(5)
字符串(String):
    一串字符,即若干个字符构成的一个序列
    
    C语言中没有字符串类型,只能用字符数组表示字符串,为了方便对字符串的处理,C语言提供了很多简化写法


    C语言规定,一个合法的字符串的最后一个字符必须为'\0',即'\0'为字符串结束标志


char a[5]={'z','m','x'};
char b[5]={"zmx"};




    在执行标准输入(比如调用scanf或getchar)时,我们键入的字符在我们按下回车键后会进入标准输入缓冲区中,scanf这些函数只是从这个缓冲区中取走相应类型的数据,如果调用函数时这个缓冲区中没有任何数据,这些函数会等待用户按键输入;如果缓冲区中有数据,但不是scanf函数所期望类型的数据,那么scanf函数就会立即失败返回,否则会直接取走相应的数据,不会等待 






字符数组
1.字符数组:
    数组中元素的是字符类型。


字符表示:‘ 字符 ’
字符串:   “字符串”


2.初始化方式:
(1)逐个赋值: 注意加‘\0’结束
    char ch[6];
ch[0]=‘H’;
ch[1]=‘e’;
ch[2]=‘\0’;
ch[3]=‘l’;
ch[4]=‘o’;
ch[5]=‘\0’;


(2)用字符串常量赋值
    char ch[6]={"Hello"};
    char ch[6]="Hello";
    char ch[]="Hello";


3.输出方式:
(1)输出逐个字符  %c
(2)输出整个字符串 %s


4.与字符串处理相关的函数
#include <string.h>


strcpy(字符串拷贝) 
strncpy(字符串拷贝,可以指定要拷贝的字节数)
strcat(字符串连接)
strlen(求字符串长度,不包括'\0')
strcmp(比较两个字符串的大小,按字典顺序,大小写敏感), strncmp(比较两个字符串开头n个字符部分的大小,大小写敏感)等


注意:
     strcpy,strncpy,strcat这些函数很危险,它们不会检查越界访问(只认‘\0’),这个工作由调用者负责,一要保证目标缓冲区(Buffer)大小充足


缓冲区(Buffer):一块内存空间




类型强行转换:
(类型)
int a=8;
char b;


b=a;


指针类型转换:
不同基类型指针可以任意转型

void型指针可以用来表示一切类型的指针(一切皆空),void*和其他类型指针之间可以自动转型