库函数:别人写好的函数,让我们去用。
字符串函数
1.strlen
c语言中需要包含头文件#include
格式:size_t strlen ( const char* str )
1.解释一下:
const char*: const char* / char const* 都禁止指针指向内容发生改变,也就是*str='0';char* const 禁止指针变量本身改变,也就是str="abcd";
函数意义是求字符串长度,求长度当然不应该修改字符串内容
size_t:是一个typedef出来的类型别名,通常情况下,size_t是unsigned long。
2.对参数进行检查:
a.使用if
if ( str = NULL ){
return 0; }
b.使用断言
#include assert(str != NULL);
如果断言的条件为假,程序直接崩溃,并给出相关提示信息。如果传入野指针c语言目前无解。
2.strcpy (字符串拷贝)
格式:char* strcpy(char* destination,const char* source)
把source里的数据拷贝到destination中
之所以要返回一个char*,目的是为了能够进行链式访问。
a.拷贝的时候会把 也一起拷贝过去。
b.要求destination对应的内存空间足够大,能容纳下src指向的字符串(包括 ),如果空间不够则会越界成为未定义行为。
3.strcat(字符串拼接)
针对大部分的编程语言来说,字符串的拼接用 + ,但c语言要用strcat。
同样,dest对应的内存空间得足够大,能容纳下最终的拼接结果。
4.strcmp(字符串比较)
比较两个字符串的大小/相等
比较规则是“字典序”
str1 和 str2
str1 < str2 ,返回一个 <0的整数
str1 > str2 ,返回一个 >0的整数
str1 = str2 ,返回0
5.strncmp、strncat、strncpy
n是在限定 读取/拷贝 字符的个数
strncpy和strncat多加了一层限制,通过n限制最大拷贝数,从而避免越界的情况。
strncmp比较前n个字符。
6.strstr(字符串匹配)
判定str2是否是str1的字符串子串,或者str1是否包含str2。比如:str1 = "hello word" str2 = "llo"。
包含:返回结果为str1中首次出现" llo "中“ l "的位置。
不包含:返回NULL。
7.strtok(字符串切分)
此函数需要调用很多次,才能完成切分。是一个反面教材。
原因:多次调用;多次调用的参数还不一致;strtok在内部记录了一个状态(上次切分的位置),会导致“线程不安全”,无法在多线程环境下使用strtok。
内存函数
1.memcpy(内存拷贝)
格式:void* memcpy(void* destination ,const void* source,size_t num);
解释一下:
void :返回void* destination为了能链式调用。
void*:可兼容各种不同类型的指针,实参是int*,char*,结构体*都可以。
size_t:拷贝多少字节。
2.memmove(内存拷贝)(能支持内存重叠的情况)
举个例子:src和dest内存重叠了可以选择倒着传
总结:str系列的函数只能针对字符串来使用(只能针对带有 的字符数组来使用)。
mem系列的函数,只要是内存,就能用。



