您的位置:首页 > 其它

第十一章 字符串和字符函数

2015-08-23 19:32 176 查看
本章学习内容:
1、函数: get() put() strcat() strncat() strcmp() strncmp() strcpy() strncpy() sprintf() strchr()
2、创建和使用字符串
3、利用C库里面的字符串和字符函数创建字符串函数
4、使用命令行参数

11.1 字符串表示和字符串I/O
puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: puts(s);
其中s为字符串变量(字符串数组名或字符串指针)。 puts()函数的作用与语printf("%s\n", s)相同。
说明:

(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,代表输入的结束。

puts()函数输出时停留在第一个空字符处,但是数组后面的字符依然存在。
strcat()函数
strcat()函数接受两个字符串参数。它将第二个函数复制到第一个函数后面,从而使第一个字符串组合成一个新的字符串,第二个字符串没有发生改变。
----笔记来自于《C Primer Plus 》第五版
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: