前言:
只要心情是晴朗的,人生就没有雨天。
1.strstr-----查找子串
注意:
返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回空指针。
1.1strstr的用例
会用,有时候也无法更好的理解函数,所以我们应该了解一下这个函数是怎么实现的?
1.2:strstr的实现
char* My_strstr(const char* dest, const char* str)//只是查找是否存在字串,所以用const 修饰。
{
char* tmp = dest;
char* ret =str;
while (*tmp != '\0')
{
dest = tmp;
str = ret;
while ((*dest==*str)&&(*dest))
{
dest++;
str++;
if (*str == '\0')
{
return tmp;//返回的是simple的首字符s,因为后面木有'\0',所以会
} //将后面的字符都打印出来。
}
tmp++;
}
return NULL;
}
int main()
{
char arr[] = "this is a simple thing";
char* tmp = My_strstr(arr, "simple");//tmp 是查询到字串首地址
if (tmp == NULL)
{
printf("该字符串不是子串,查询无果\n");
}
else
{
printf(tmp);
}
return;
}
2.strtok-----切割函数
注意:
1.const char * delimiters;是用来定义分隔符的字符。
2.strtok函数会找到str中的下一个标记,并将其用'\0'结尾,返回一个指向这个标记的指针。
3.strtok函数的第一个参数不为NULL,函数会找到str中第一个标记,将保存它在字符串中的地址。
3.strtok函数的第一个参数为NULL,函数将在同一个字符的保存位置开始,查找下一个标记。
4.如果字符串中不存在更多的标记,则返回NULL指针。
2.1:strtok的用例
3.strerror----获取指向错误消息字符串的指针
注意:
errnum:出现错误的错误码
strerror的头文件是<errno.h>(必须要包含的头文件。)
4.memcpy----复制内存块
无法进行内部的内存拷贝
注意:
1.函数从source 的位置进行拷贝num个到destinatio
2.此函数不用遇到'\0'停止。
2.1 memcpy的用例
2.2:memcpy的实现
void* My_memcpy(void* dest, const void* ret, size_t num)
{
assert(dest && ret);
void* srt = dest;
while (num--)
{
*(char*)dest = *(char*)ret;//因为char 是最小的,(char *)的每一次步长是一字节。
dest = (char*)dest + 1;
ret = (char*)ret + 1;
}
return srt;
}
int main()
{
char arr[] = "hello\nword\n";
char arr1[20] = { 0 };
char* tmp = My_memcpy(arr1, arr, 12);//12是多少个字节。
printf(arr1);
return 0;
}
接下来这个函数,可以实现在自己内部实现内存拷贝
3.memmove------移动内存块
3.1:memmove的用例
3.2:memmove的实现
要知道它是如何实现的,我们必须知道它是怎么执行的。
明白了道理,那接下来看一下如何具体实现。
4.memset------设置内存块
将ptr 指向的内存的num 个字节设置为value.