嵌入式学习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)
执行可执行文件时可跟参数
- 嵌入式学习13(C语言字符串,Linux下清除缓冲区)
- linux 下清除缓冲区
- C语言清除输入缓冲区
- C语言清除缓冲区的函数
- 嵌入式Linux下的C语言题
- c清除缓冲区数据
- 嵌入式 Linux --C语言
- 学习嵌入式C语言
- 嵌入式 Linux C语言(五)——指针与字符串
- 嵌入式C语言学习(2)
- 嵌入式学习5(C语言基础)
- Linux 下 C 语言连接 MySQL 数据库 / 西安嵌入式培训
- 嵌入式 linux下线程池小结c语言
- c语言学习零碎整理(1):缓冲区
- c语言学习零碎整理(1):缓冲区
- Linux下C语言字符串操作之分割字符串总结
- Linux C编程 使用scanf时清除键盘缓冲区 -- 清除输入缓存
- Linux C编程 使用scanf时清除键盘缓冲区 -- 清除输入缓存
- Redis探索之旅(3)- 在Windows下将Redis注册成本地服务
- codeforces 727E. Games on a CD(双Hash
- JAVABEAN EJB POJO区别
- Linux源码解析-内核栈与thread_info结构详解
- Struts2
- 嵌入式学习13(C语言字符串,Linux下清除缓冲区)
- 图:求图的最短路径
- vue第一篇之入门helloworld
- SpringMvc配置汇总
- ckeditor 学习笔记【2】添加自定义按钮
- Redis探索之旅(4)- 在Linux环境下搭建单实例Redis服务实例
- android library 编译ndk文件 编译器的问题
- react native 实现surfaceview播放视频
- Java项目框架搭建系列(Java学习路线)-博客提纲