《c和指针》(四)

来源:互联网 发布:网络教育本科怎么报名 编辑:程序博客网 时间:2024/05/17 04:26

一、字符串长度
1、标准库函数:size_t strlen(char const *string) ; 头文件:string.h, size_t 定义在stddef.h中,是无符号整型。
2、字符串长度的比较:
方案一: if (strlen(x) >= strlen(y)) {
………………
}
方案二:if (strlen(x) - strlen(y) >= 0) {
…………………
}
方案一是正确的。方案二会出现问题,它的条件永远为真,因为strlen的返回值是无符号的,两个无符号的整型相减,结果还是无符号的。如果判断表达式中既有无符号也有有符号的,例如下面两个方案:
方案一:if (strlen(x) >= 10) {
…………………..
}
方案二:if (strlen(x) - 10 >= 0) {
…………………………
}
同样,方案一是正确的。方案二会出现一些问题,在方案二中,将strlen的返回值强制转换为int再参与表达式运算可以消除这个问题。
二、字符串复制、连接、比较库函数
1、长度不受限的字符串函数 strcpy、strcat、strcmp,注意strcpy(char *dst, char const *src)和strcat(char *dst, char const *src), 当dst和src指向的内存区域出现重叠时,其结果是未定义的,因此,要保证dst指向的内存区域可以存储的下结果。
2、长度受限的字符串库函数 strncpy(char *dst,char const *src, size_t len), strncat(char *dst, char const *src, size_t len), strncmp(char *dst, char const *src, size_t len)
三、字符串查找函数
1、查找一个字符
strchr(char const *src, int ch);查找字符ch 在src中第一次出现的位置,若无,返回NULL
strrchr(char const *src, int ch);查找字符ch 在src中最后一次出现的位置,若无,返回NULL
2、查找字符集中的任一字符并返回其第一次出现的位置,strpbrk(char const *src, char const *group),若无,返回NULL。
3、查找子串str在src中第一次完整出现的位置,strstr(char const *src, char const *str), 若无,返回NULL;若str为空字符串,返回src。
注:在标准库中并没有strrpbrk和strrstr,如有需要自己实现,可以在函数内部调用strpbrk和strstr实现。
四、高级字符串查找
1、size_t strspn(char const *str, char const *group); 返回str起始部分匹配group中任意字符的字符个数,如果str中的某一个字符没有出现在group中,查找结束。该函数可用于查找str字符串中第一个非group中的字符的位置,str + 返回值即可求出。
size_t strcspn(char const *str, char const *group); 返回str起始部分不匹配group中任意字符的字符个数,直到匹配到任意一个group中指定的字符结束。该函数可用于查找str字符串中所有的非group中的字符。
2、分隔字符串:char *strtok(char *str, char const *sep); 其中,sep指向一个字符串,它可以是很多分隔符的集合。注意一点:该函数会修改原字符串str。
五、char *strerror(int error_num);将一个错误码转换为字符串信息。
六、内存操作函数,可以处理任意字节序列,不仅仅限于以NULL结尾的字符串
memcpy、memmove、memcmp、memchr(注:该函数可以在一个字节序列中查找一个特定的值)、memset
1、这些函数的原型都指定了需要操作的字节数,注意,是字节数,如果是多字节数据,则要乘以数据长度。
2、在使用memcpy时,源地址如果与目的地址重叠,则结果为定义;
memmove相比memcpy可以正确处理源地址如果与目的地址重叠的情况,因为memmove的实现利用了临时位置,这个临时位置可以保证源与目的地址不重叠,但是它的速度可能会比memcpy慢一些。

0 0
原创粉丝点击