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)
后面有基本函数的封装。。。