字符函数和字符串函数下部分

本文详细介绍了C语言中几个重要的字符串和内存操作函数:strstr用于查找子串,strtok用于字符串切割,strerror获取错误消息字符串,memcpy和memmove实现内存块复制,以及memset用于设置内存块。通过实例演示和源码分析,帮助读者深入理解这些函数的工作原理和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

只要心情是晴朗的,人生就没有雨天。


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.

4.1 memset 的用例

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值