C语言字符串函数strstr、strtok和strerror

1.strstr函数

函数作用:

    在字符串1中查找是否存在字符串2。

例子:

"bbc"中找”bc“

函数定义:

const char * strstr ( const char * str1, const char * str2 );
  • str1字符串1的首字符的指针。
  • str2字符串2的首字符的指针。
  • const修饰是因为只用于查找,不做修改,防止写错误代码。

函数返回值:

        如果为真则返回字符串2在字符串1首次出现的地址,如果为假则不存在返回NULL(空指针)

模拟实现:

const char* my_strstr(const char* str1, const char* str2)
{
    //如果*str2指向的为空就返回str1
    if(!*str)
        return str1;
    const char* p1 = NULL;//临时指针变量
	const char* p2 = NULL;
	while (*str1)//遍历每个字符,结束条件'\0'
	{
		//如果遇到相等,就像后判断
		if (*str1 == *str2)
		{
			//使用中间指针去判断,防止str1和str2的起始位置丢失
			p1 = str1;
			p2 = str2;
			//判断是否相等,相等就继续向下判断
			while (*p1 == *p2 && *p1 != '\0' && *p2 != '\0')
			{
				p1++;
				p2++;
			}
			//如果此时p2=='\0',就说明找到了
			if (*p2 == '\0')
				return str1;
			//如果*p1=='\0',*p2!='\0'就说明长度不够了,找不到了
			if (*p1 == '\0')
				return NULL;
			
		}
		str1++;
	}
	return NULL;
}
	

 

2.strtok函数

函数作用:

通过指定的分隔符切割字符串

例子:

'.'切割"bbc.bcc"

 函数定义:

char * strtok ( char * str, const char * delimiters );
  • str需要被切割的字符串的首地址,如果是第一次被切割则为字符串的首地址,如果不是第一次则是NULL空地址(函数会在切割后保留切割符出现的地址)。
  •  delimiters是分隔符/切割符,可以是单个分割符的地址,也可以是分割符集合(字符串)的首地址。

函数返回值:

        如果存在分隔符,则函数返回切割后字符的首地址,如果不存在,则返回空指针NULL。

函数的使用:

  • 此函数在切割个同意字符串时,第一次使用时,需要传字符串的地址,在这之后则不需要传地址了,函数在每一次切割后都会记住分隔符出现的位置,下次调用时只需传空指针NULL,函数就会根据记忆的地址向后切割。
  • 函数再切割之后会在切割符处换上'\0',然后返回字符串的起始地址。
  • 函数在切割时会对字符串进行操作,为避免对原字符串进行操作,在操作前拷贝一份,来进行操作。

3.strerror函数

函数作用:

  • 在不同的操作系统和C语言标准库中会规定一些错误码,一般都是放在errno.h这个头文件中说明。
  • 在程序运行时,会生成变量errno来记录程序出现错误时的错误码,在程序启动时为0,当调用库函数出现错误时就会将对应的错误码放在errno中,而错误码不能表示错误信息,这时候就需要strerror函数。
  • 函数通过错误码把错误信息字符串的首地址返回出来。

例子:

通过错误码返回的字符指针进行打印错误信息

函数定义:

char * strerror ( int errnum );
  • errnum错误码
  • char* 错误码对应的错误信息的字符串的地址

perror函数:

 perror函数使用打印错误信息,函数参数为错误信息的首地址,返回为空,一般设为满足错误条件时就会调用perror函数打印,那么起始perror函数就是printf函数+strerror函数。


本章内容结束,下章见,拜拜!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值