嵌入式学习13(C语言字符串,Linux下清除缓冲区)

来源:互联网 发布:win7没有网络连接图标 编辑:程序博客网 时间:2024/06/05 23:00

字符串


1、字符串(String):串字符,即若干个字符构成的一个序列

Ø  C语言中没有字符串类型,只能用字符数组表示字符串,为了方便对字符串的处理,C语言提供了很多简化写法

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

2、字符数组:数组中元素的是字符类型

1)逐个赋值:注意手动加’\0’

   char ch[6];

         ch[0]=’H’;

         ch[1]=’e’;

         ch[2]=’l’;

         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  //注意关注有没有’\0’

4、sizeof和strlen的区别

Ø  sixeof是运算符,strlen是函数

Ø  对于charch[]="Hello";

sizeof(ch)为6  算’\0’//sizeof是求空间的大小

s trlen(ch)为5 不算’\0’

4.与字符串处理相关的函数

         #include<string.h>

 

strcpy(字符串拷贝)

strncpy(字符串拷贝,可以指定要拷贝的字节数)

strcat(字符串连接)

strlen(求字符串长度,不包括'\0')

strcmp(比较两个字符串的大小,按字典顺序,大小写敏感), strncmp(比较两个字符串开头的部分的大小,大小写敏感)等

注意:

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

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

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

 

  Linux系统下清除缓冲区


 

scanf("%c")   

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

    在Linux系统中,有时会惯性思维,使用在Windows程序设计中常用的方法:

(1)fflush(stdin):

         fflush()函数,不是标准c库中的,只是标准c的扩展,所以在Linux中,不行。

(2)rewind(stdin):

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

(3)getchar():  //getchar()一个一个处理丢掉

while(getchar()!='\n')

                     ;

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

(4)setbuf(stdin,NULL):

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

(5)fgets():

         charzmx[1024];

         fgets(s,1024,stdin);

在linux 中,可行的方案,只有(3)、(4)、(5)

执行可执行文件时可跟参数

原创粉丝点击