<C和指针---读书笔记11>

对于构成字符串的,string.h封装了许多现成的函数以供使用。

字符串,不论是常量字符串还是借用数组尾缀’’。  这个strings.h里面的函数都是针对的字符串。 即以’’做为截至。

如果你不幸的对 char数组操作,可能得到的结果并不是你想要的结果。

strlen函数  unsigned int  strlen (char const *string)

 参数列表: 是一个指针或者数组名即可。

 返回值:  返回一个无符号数。  如果两个返回值进行比较大小,可以使用  strlen( str1)  < strlen(str2) ,

                 但是 strlen( str1)  - strlen(str2)  >0 就不行。因为两个无符号数减法结果依旧是一个无符号数。无符号数必然大于0的。

                可以使用(int) 强制转换成 有符号int型。

  用途:  计算字符串长度的。它和sizeof(字符串)的区别在于。Sizeof是计算所占的存储位置bytes数目,因此会把’’算进来。

而strlen 只计算有效的字符数目。所以该值是真正的char数目。 Sizeof 是真正所占存储的数目。

 

Strcpy 函数    char *strcpy (char *dst , char const *src)

 参数列表 :  前面是目的地,后面是源

返回值 :  返回一个dst的值,但很多情况下不使用,只使用strcp完成对存储的copy动作。

用途: 将源字符串,拷贝到目的字符串中。

               源长度 > 目的地 :   dst的内容全部被覆盖了, ‘’也被覆盖。并继续覆盖后面的内容。导致其他的变量被修改,这是极其危险的。

               源长度 = 目的地 : 正好

               源长度 < 目的地 : dst只有前面的内容被修改。 包括’’替换掉str[3].  它会影响strlen(str3).因为它提前遇到了’’

                                                    但不影响sizeof,因为在声明str3数组时候,编译器已经记录下来它对应的长度信息。无论如何都改不掉了。

 

 

 

 

Strcat函数    char *strcat (char *dst , char const *src)

 参数列表 :  前面是目的地,后面是源

返回值 :  返回一个dst的值,但很多情况下不使用,只使用strcat完成对存储的衔接动作。

用途: 将源字符串,粘连到目的地的后面。

              显然需要特别注意目的地剩余的空间是否能容下源? 能否容下’’ ?

源是紧接着最后一个char还是紧接着’’ ?

 

   事例中把str1 粘连到str3后面,可以看出是从最后一个 有效char 开始的。 并且把str1的’’ cat进来了。

 

 

Strcmp函数    int  strcmp (char const *s1, char const *s2)

 参数列表 :  两个带比较的字符串

返回值 :  返回比较结果。若相等返回 0.  若1>2,返回 一个大于0的值 ;若1<2,返回 一个小于0的值  

用途: 直接比较 s1和s2的char。

 

Strncpy 函数    char *strcpy (char *dst , char const *src ,unsigned int  len)

 参数列表 :  前面是目的地,后面是源,并跟一个长度信息。

返回值 :  返回一个dst的值,但很多情况下不使用,只使用strcp完成对存储的copy动作。

用途: 将源字符串,拷贝到目的字符串中。

Len是指从 src截取长度? 还是 dst的修改长度?这个是很关键的对理解。Len表示修改dst的长度。

所以,如果strlen(src )  < len 。 把src复制过去,同时长度不足的部分,会用’’替代,用于修改dst。 

             如果strlen(src )  >=len ,  就只复制len长度。

当然这里我们没有考虑 dst是否有足够空间容纳。

 

Strncat函数    char *strncat (char *dst , char const *src ,unsigned int  len)

 参数列表 :  前面是目的地,后面是源,紧跟一个长度信息

返回值 :  返回一个dst的值,但很多情况下不使用,只使用strncat完成对存储的衔接动作。

用途: 将源字符串,粘连到目的地的后面。

             更加详细的描述是 : 不管dst空间是否足够容纳,在最后一个有效char之后,紧接着一股脑粘连len长度信息。并再额外粘一个 ‘’

            所以不论len长度 与strlen(src)关系,都粘连len+’’。 不够就用’’补。

 

Strncmp函数    int  strncmp (char const *s1, char const *s2,unsigned int  len)

 参数列表 :  两个带比较的字符串,只比较len长度

返回值 :  返回比较结果。若相等返回 0.  若1>2,返回 一个大于0的值 ;若1<2,返回 一个小于0的值  

用途: 直接比较 s1和s2的char。

 

///////////////////////////////////////////////////////////////////////

字符串查找函数。分成几种,简单的查找char字符、查找”a|b|c” 、查找”xxx”字符串。

                                                          高级查找如:查前缀、查分隔符等。

简单查找---------查找一个字符串:

   char *strchr ( char const *str,int ch)

参数列表 :  数组str,以及待查找的字符

返回值 :  返回一个指针,指向第一次出现的 位置。

用途:查找时候有ch字符,若有就返回一个指针,指向第一次出现的位置。若没有就返回一个NULL指针。

    char *strrchr ( char const *str,int ch)

用途:查找时候有ch字符,若有就返回一个指针,指向最后一次出现的位置。若没有就返回一个NULL指针

查找"a|b|c"任意一个字符。

 char *strpbrk ( char const *str,char const *group)

用途:查找时候有字符集合,若任意一个存在就返回一个指针,指向第一次出现的位置。若没有就返回一个NULL指针

查找"abc"字符

 char *strstr ( char const *str,char const *s)

用途:查找时候有字符集合,若整体存在就返回一个指针,指向第一次出现的位置。若没有就返回一个NULL指针

高级查找 ----- 需要用到char高级查找时候,再来仔细研究。

字符判断 & 字符转换:  封装函数在于 ctype.h 头文件里面。

   isdigit :     isdigit ( char)  ,如果是0-9,就返回真。

   isalpha:  isalpha( char)  ,如果是a-z,A-Z,就返回真。

   等等,还有其他的。

字符转换 :   int  toupper ( char)  : 把小写字母转成大写。 返回大写形式

                   int  tolower ( char)  : 把大写字母转成小写。  返回小写形式

////////////////////////////////////////////////////////////////////////////////////////////////

内存操作

 上面所介绍的字符串函数,函数内部都会自动的去判断'',并以此作为结束标志。这样,这些函数就不能用于数组。

因为数组里面存在''是很正常的。

C定义了另外一套函数,可以去直接操作内存。

void *memcpy(void *dst, void *const src ,unsigned int length)

memmove,memcmp、memchr、memset

简单介绍下: memcpy 中len是字节数目。 即cpty多少字节。  因此如果字符里面是整数型,就要注意 len *4要。

memmove: 跟memcpy类似。允许地址重叠。

memcmp: 也是比较

memchr:寻找第一次出现的位置,返回一个指针指向它

memset:  修改前n个字符,全部改成目标值。

原文地址:https://www.cnblogs.com/mokang0421/p/7502887.html