美文网首页
C primer Plus study note chapter

C primer Plus study note chapter

作者: 转身一世铅华尽 | 来源:发表于2019-08-13 15:11 被阅读0次

字符串是由空字符结尾的char类型数组
字符串常量:双引号括起来的内容称为字符串常量。
字符串常量属于静态存储类别,就是说,一个字符串如果被声明了,则在整个程序的生命周期内,这个字符串的双引号中的字符被视为指向该字符串存储位置的指针。
例如: “zzd”; *"zzd" 的到第一个字符,对这个取址得到整个字符串的地址。
定义字符串数组时,必须让编译器知道需要多少空间
字符串数组,会在编译时将字符串加载到静态存储区,在运行时才将字符串拷贝到数组中。
编译器可以把多次使用的相同的字符串常量存储在一处或者多处
如果要用数组表示一系列待显式的字符串,请使用指针数组,因为,它比二维字符串数组的效率更高,,但是指针数组指向的字符串常量不能变,
而使用二维数组中的内容是可以改变的,所以要为改变字符串或者字符串输入预留空间,不要使用指向字符串常量的指针。

gets()函数:gets()函数简单易用,它读取整行输入,直到遇到换行符,然后丢弃换行符,存储其余字符,并在这些字符的末尾添加一个空字符使其成为一个C字符串。
由于gets函数只知道输入字符串数组的开始处,并不知道其大小,如果输入过长,则可能导致缓冲区溢出,,如果这些溢出的只占用了尚未使用的内存则不会立即出现问题(在之后的内存分配上可能会出问题)
,但是如果占用了程序中其余数据的内存,则会导致程序立即出现异常中断
fgets()和fputs()函数
fgets函数通过第二个参数限制读入的字符来解决缓冲区溢出问题。该函数是设计专门用来处理文件读取的
fgets的第二个参数,指明了读取函数的最大数量,,如果该参数为n,则函数将读取到n-1位,或者遇到第一个换行符为止。
如果函数读取到第一个换行符,会把它存储在字符串中
函数的第三个字符会指明要读取的文件,如果是读取从键盘输入的数据,则使用stdin作为第三个参数。
由于fgets函数把换行符放在字符串的末尾,通常需要与fputs函数配对使用
fputs函数和fgets函数相对应,只有两个参数,第一个表明是字符串数组名,第二个参数指明要写入的文件,或只是用stdout显示在计算机上

空字符:空字符是用于标记C字符串末尾的字符,其对应字符编码是0,由于其他字符的编码不肯能是0,所以不可能是字符串的一部分。
空指针:有一个值,该值不会与任何数据的有效地址对应,通常,函数使用它返回一个有效地址表示默写特殊情况出现,例如遇到文件结尾或则未能按预期执行。
空字符是整数类型,而空指针是指针类型,两者都可以使用数值0来表示,但是两者是不同类型的0,另外空字符只有一个字符,所以只占一个字节,但是空指针是一个地址,通常是占4字节的。

gets_s()函数:只从标准输入读取数据,如果读取到换行符,则会丢弃它,而不是存储它
如果读取到最大字符位,都没有遇上换行符,则首先,把数组中的首字符设置为空字符,读取并丢弃随后的输入,直到读取到换行符或者文件的结尾,
然后返回空指针,接着,调用依赖实现“处理函数”,可能会中止或退出程序,所以在读取到最大字符数之前,这个函数和gets函数还是一样的
scanf()函数:scanf函数更像是读取一个单词输入,比如说使用转换说明控制读取位数的限制。

字符串输出:
puts():这个函数很好使用,只需要把字符串的地址作为参数传递给他就行了,知道遇上空字符就停止输出
fputs函数和fgets函数相对应,只有两个参数,第一个表明是字符串数组名,第二个参数指明要写入的文件,或只是用stdout显示在计算机上
printf()函数和scanf函数相对应。

字符串函数:
strlen()函数:用于统计字符串的长度,
strcat()函数:接收两个字符串作为参数。把第二个字符串备份附加在第一个字符串末尾,并把形成的新的字符串作为第一个字符串,第二个字符串不变。,返回新的第一个参数。
函数的类型是char * ,即指向char的指针,但是这个函数无法检查是否能够容纳新的字符串的长度,
如果第一个原数组分配的长度不够的话,则会出现多出来的字符溢出到相邻的存储单元中

strncat()函数:这个函数比strcat多了一个参数,多出来的参数用于指定第二个字符串添加到第一个字符串的最大位数。

strcmp()函数:这个函数用于比较两个字符串是否相等,其返回值以字母表中第一个字符串和第二个字符串的位置比较,通常以ASCII值进行比较
如果第一个在前,则返回负数,如果第一个在后则返回正数,如果相等则返回0,以第一对出现不同的字符串进行比较。

strncmp()函数:比较字符串中的字符,直到出现不同字符为止,这一过程可能会一直持续到字符串的末尾,本函数在比较的过程中,可以比较两个字符串的不同的地方,也可以比较第三个参数指定的字符数
个数的字符。

strcpy()函数和strncpy()函数:如果要拷贝一串字符串,则需要使用strcpy()函数,strcpy(i,j),把源字符串j拷贝至目标字符串i
总之,本函数在接受来嗯个字符串指针作为参数,可以把指向源字符串的第二个指针声明为指针,数组名或则字符串常量,而指向源字符串的第一个指针应该指向第一个数据对象,
而且该对象应该有足够的内存空间区存储源字符串的副本。声明数组将分配存储数据的空间,而声明指针则只分配存储地址的空间。
这个函数返回的是一个char * 类型的值,返回的是第一个参数的值,即一个字符的地址,第一个参数不必指向数组的开始,这个属性可以用于拷贝数组的一部分。
strcpy和strcat一样不能检测目标空间是否能容纳源字符串的副本,同样的strncpu函数也一样第三个参数可以设置可以拷贝的最大字符串数。

sprintf()函数:用来将数据写入字符串,而不是打印在显示器上,因此,该函数可以把多个元素组合成为一个字符串,
其第一个参数是目标字符串的地址,其余参数与printf()相同,即格式化字符串和待写入项的列表

下面是一些常用的字符串函数:
char * strcpy(char * restrict s1,const char * restrict s2); 把s2指向的字符串(包括空字符)拷贝值s1的位置,返回s1
cahr * strncpy(char * restrict s1,const char * restrict s2,size_t n);从s2拷贝n个字符到s1中,如果n>s2.length则拷贝至s2结尾的空字符,如果<则拷贝n个,不拷贝空字符
char * strcat(char * restrict s1,const char * restrict s2);把s2指向的字符串拷贝至s1末尾,s2的第一个字符覆盖s1的末尾空字符,返回s1;
cahr * strncat(char * restrict s1,const char * restrict s2,size_t n);拷贝s2中的n个字符到s1的末尾,不会拷贝s2中的空字符以及其后的字符,并在s1末尾加一个空字符,返回s1
int strcmp(const char * s1,const char * s2);比较s1,s2是否相等,如果相等则返回0,s1在ASCCII中的位置如果在s2之前则返回负数,反之则放那会正数;
int strncmp(const char * s1,const char * s2,size_t n);比较s1和s2的n个字符,或遇到第一个空字符时停止。
char * strchr(const char * s,int c) 如果s包含c字符,则函数返回指向s字符串首位置的指针(末尾空字符也在查找范围内),如果在字符串中未找到C字符,该函数返回空指针。
char * strpbrk(const cahr * s1,const char * s2);如果找到s1中包含任何s2中的字符串,则返回,s1的首地址指针,如果未找到,则返回空字符
char * strrchr(const char * s,int c);函数返回字符串c的最后一次出现的位置(,末尾的空字符也是字符串的一部分,所以在查找范围内),如未找到则返回空字符。
char * strstr(const char * s1,const char * s2);返回指向s2中s2字符串出现的首位置,如未找到,则返回空指针
size_t strlen(const char * s);返回字符串s中的字符个数,不包括末尾的空字符

相关文章

  • C primer Plus study note chapter

    循环语句: while( expression ) 循环语句根据语句中的判断条件对判断条件进行判断,如果表达式ex...

  • C primer Plus study note chapter

    数组和指针 头文件:把函数原型和已定义的字符常量放在头文件中是一个良好的编程习惯 指针取址运算符 &用于拿到变量的...

  • C primer Plus study note chapter

    存储类别:C中提供了许多不同的模型或者存储类别在内存中存储数据。从硬件方面看:被存储的值都占用了一定的物理内存,C...

  • C primer Plus study note chapter

    运算符、表达式、语句基本运算符:=,+,_*,/,指数运算符在C中是不存在的,C中提供了一个专门的函数进行指数运算...

  • C primer Plus study note chapter

    条件控制语句if(){}else{}语句 getchar();本函数从终端读取输入的字符赋给一个字符对象,当遇上回...

  • C primer Plus study note chapter

    字符串是由空字符结尾的char类型数组字符串常量:双引号括起来的内容称为字符串常量。字符串常量属于静态存储类别,就...

  • C语言从入门到精通所需的7本书

    C Primer Plus C Primer Plus作为一本被人推崇备至的c入门经典,C primer plus...

  • Note from C primer plus

    Notes after reading C primer plus Data and C## Definition...

  • EN Note # A Study in Scarlet, Ch

    上接 EN Note # A Study in Scarlet, Chapter 1-7 Chapter 8The...

  • Learning C Primer Plus | Chapter

    数据与C 位(bit)是计算机最小的存储单位。它可以容纳两个值(0或1)之一,是计算机存储的基本单位。字节(byt...

网友评论

      本文标题:C primer Plus study note chapter

      本文链接:https://www.haomeiwen.com/subject/gofbjctx.html