模拟寻找字符串
#include <assert.h>
const char* S_strstr(const char* arr1, const char* arr2)
{
const char* cp;
const char* s1;
const char* s2;
assert(arr1 && arr2);
cp = arr1;
while (*cp)
{
//开始匹配
s1 = cp;
s2 = arr2;
//匹配两个字符串
while (*s1 && *s2 && *s1 == *s2)
{
s1++;
s2++;
}
//当匹配完后碰到字符串中最后自带的'\0'后就返回
if (*s2 == '\0')
return cp;
//重置起始位置
cp++;
}
return NULL;
}
实现strtok字符串分割函数
strtok
是 C 标准库中的一个字符串分割函数,位于 <string.h>
头文件中。其作用是根据指定的分隔符(delimiters)将字符串拆分为多个子串(tokens)。
#include <string.h>
int main()
{
char arr[] = "lningkang@cql.tjl@yj.lqx";
char buf[200] = { 0 };
strcpy(buf, arr);
char* p = "@.";
char* s = NULL;
for (s = strtok(arr, p); s != NULL; s = strtok(NULL, p))
printf("%s\n", s);
return 0;
}
实现strerror
strerror
是一个 C 标准库函数,用于将错误码(通常存储在 errno
中)转换为对应的错误描述字符串。该函数属于 <string.h>
头文件,常用于调试和错误处理。
#include <string.h>
#include <errno.h>
/*
如果打开文件不成功,原因一:说明在该目录文件下没有此文件
原因二:在原因一的基础上没有打开文件扩展名
*/
int main()
{
FILE* pf = fopen("add.txt", "r");
if (pf == NULL)
{
printf("打开文件失败,原因是:%s\n", strerror(errno));
return 1;
}
else
printf("打开文件成功\n");
return 0;
}
实现memcpy
memcpy
是 C 和 C++ 标准库中的一个函数,用于将一段内存内容从源地址复制到目标地址。它是高性能内存操作的常用工具,常用于数组、结构体等数据的快速拷贝。
#include <string.h>
int main()
{
int arr[10] = { 0 };
int arr1[] = { 1,2,3,4,5 };
memcpy(arr, arr1, 20);
int i = 0;
for (i = 0; i < 10; i++)
printf("%d ", arr[i]);
return 0;
}
模拟实现memcpy
#include<assert.h>
void* M_memcpy(void* str1, void* str2, size_t sz)
{
assert(str1 && str2);
//str2的内存一个一个搬运到str1中即可实现拷贝
while (sz)
{
*(char*)str1 = *(char*)str2;
str1 = (char*)str1 + 1;
str2 = (char*)str2 + 1;
sz--;
}
}