第十一章 字符串和字符函数
来源:互联网 发布:中国广告服务贸易数据 编辑:程序博客网 时间:2024/05/23 01:37
(1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。
(2). 可以将字符串直接写入puts()函数中。如: puts("Hello, Turbo C2.0");
gets()函数gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。
其调用格式为: gets(s);
其中s为字符串变量(字符串数组名或字符串指针)。gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s) 函数输入字符串时存在一个问题, 就是如 果 输入了空格会认为输入字符串结束, 空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符串直到回车为止。(gets函数的一个不足是不检查预留储存区是否能够容纳实际输入的数据,多出来的数据简单溢出到相邻的内存区,这是非常危险的!!!!请用fgets())
如果字符串文字中间没有间隔或者间隔的是空格符,ANSI C会将其串联起来:
char ch1="hello,and""hello";与“hello,andhello”相同
增量运算符只能用在变量名前,不能用于产量名前。
赋值语句左边必须是一个变量。
11.2 字符串输入
空指针是一个地址,而空字符是char类型的数据对象,其值为零。数值上两者都可以用0表示,但是他们的概念不同:NULL是一个空指针,而0是一个char类型的常亮。
fgets()和gets()函数的区别
1、fgets比gets安全!
为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常严重!
fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。
2、用strlen检测两者的输入的字符串长度,结果不一样
同样是输入123
gets只有一次换行,这是因为程序的语句printf(“%s\n”,str)
fgets有两次,而第二次是其本身把回车换行符存入了字符串里
所以,gets的长度只有3和输入的字符串长度一样,fgets是4,多出来的是回车换行符。
具体的介绍:
fgets函数fgets函数用来从文件中读入字符串。
fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。
函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。
因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。
gets()将删除新行符, fgets()则保留新行符。
要去掉fgets()最后带的“\0",只要用 s[strlen(s)-1]='\0';即可。
fgets不会像gets那样自动地去掉结尾的\n,所以程序中手动将\n位置处的值变为\0,代表输入的结束。
scanf()更基于获取单词而不是获取字符串。
11.3 字符串输出
fgets()和gets()函数的区别
1、fgets比gets安全!
为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常严重!
fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。
2、用strlen检测两者的输入的字符串长度,结果不一样
同样是输入123
gets只有一次换行,这是因为程序的语句printf(“%s\n”,str)
fgets有两次,而第二次是其本身把回车换行符存入了字符串里
所以,gets的长度只有3和输入的字符串长度一样,fgets是4,多出来的是回车换行符。
具体的介绍:
fgets函数fgets函数用来从文件中读入字符串。
fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。
函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。
因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。
gets()将删除新行符, fgets()则保留新行符。
要去掉fgets()最后带的“\0",只要用 s[strlen(s)-1]='\0';即可。
fgets不会像gets那样自动地去掉结尾的\n,所以程序中手动将\n位置处的值变为\0,代表输入的结束。
- 第十一章 字符串和字符函数
- 第十一章 字符串和字符串函数
- 第十一章 字符串和字符串函数(练习)总结 140606
- 第十一章 字符串与字符串函数
- 第十一章 字符串和字符串函数(定义字符串)总结 140524
- 第十一章 字符串和字符串函数(字符串标准输入输出库函数)总结 140525
- 第十一章 字符串和字符串函数(字符串标准输入输出库函数)总结 140527
- 第十一章 字符串和字符串函数(字符串例子)总结 140529
- 第十一章 字符串和字符串数组
- 字符串和字符函数
- 【C Primer Plus】第十一章 字符串和字符串函数(一)
- 【C Primer Plus】第十一章 字符串和字符串函数(二)
- 第十一课 常用字符串函数
- 字符和字符串C函数
- 《Python核心编程》第十一章:函数和函数式编程
- Python核心编程(第十一章)--函数和函数式编程
- 源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 1(字符型函数)
- 源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 2(字符型函数)
- 数据结构基础 后序遍历和中序遍历还原二叉树
- 走格子/走棋盘问题
- 各种语音编码方法,所需要的带宽
- 剑指offer面试题16-反转链表
- Java I/O 操作及优化建议
- 第十一章 字符串和字符函数
- java基础-多线程
- 第3组UI(1)-AdapterView之ListView及MVC设计模式
- IOS Storyboard中使用Segue传值
- 使用gcc的-finstrument-functions选项进行函数跟踪
- visual stdio 2015下调试c++程序一闪而过决解办法
- 150. Evaluate Reverse Polish Notation
- JVM 垃圾回收器工作原理及使用实例介绍
- java的instanceof关键字