<c和指针>学习笔记4之字符串

1 字符串基础

  NUL字节是字符串的终止符,但它本身并不是字符串的一部分,所以字符串的长度并不包括NUL字节。

(1)字符串长度

  size_t strlen(char const * string)注意这里返回的是size_t,它是一个无符号整数类型,在表达式中使用无符号数可能导致不可预料的结果。例如

  if(strlen(x)-strlen(y)>=0)这个表达式将会永远真 成立。

(2)不受限制的字符串函数

  使用不受限制的函数之前,必须确定字符串实际上是以NUL字节结尾

  char *strcpy(char *dst,char const *src) 

    注意:无法保证目标字符数组有足够的空间容纳需要复制的字符串

  char *strcat(char *dst,char const *src)

  int strcmp(char const *s1,char const *s2)

    s1小于s2 返回一个小于0的

    s1大于s2 返回一个大于0的

  鉴于上面三种可能导致长度不够引出错误,出现了对应有长度限制的接口函数

  char *strncpy(char* dest,char const*src,size_t len)

  char *strncat(char* dest,char const*src,size_t len)

  int strncmp(char const *s1,char const*s2,size_t len)

2 字符串查找基础

(1)在一个字符串中查找一个特定字符

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

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

(2) 查找任何几个字符

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

  返回一个指向str中第一个匹配group中任何一个字符的字符位置。

(3)查找一个字串

  char *strstr(char const*s1,char const *s2)

(4)查找标记

  char *strtok(char *strr,char const *sep)

  从字符串中隔离各个单独的称为标记的部分并丢弃分隔符。

2 内存操作

  之前说过,字符串是以NUL字符结尾的,也就是说上面的函数处理字符串中内部有NUL的情况就不是那么方便了,就出现了如下函数。可以处理任意的字节序列

  void *memcpy(void* dest,void const *src,size_t length) 从src起始位置赋值length个字节到dst的内存起始位置

  void memove(void *dest,void const *src,size_t length)

  void memcmp(void const *a,void const *b,size_t length)

后面有基本函数的封装。。。 

原文地址:https://www.cnblogs.com/lanjianhappy/p/10613028.html