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

来源:互联网 发布:中国广告服务贸易数据 编辑:程序博客网 时间:2024/05/23 01:37
本章学习内容:
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 》第五版

0 0
原创粉丝点击