字符串+内存函数的介绍

本文深入探讨C语言中的字符串处理函数,包括strtok、strerror、字符判断函数,以及内存操作函数memcpy、memmove、memcmp和memset。通过实例解析这些函数的使用方法和注意事项,帮助读者提升对C语言复杂库函数的理解。
摘要由CSDN通过智能技术生成

与字符有关的较复杂库函数:

前言:当我们只是简单的了解C语言,我们会认识和掌握strcpy,strcmp等简单的库函数,如果想更进一步,我们或许需要掌握更加复杂的库函数。本篇文章就介绍了strtok、strerror、字符判断函数、memcpy、memcmp以及memset函数。

1、strtok函数

在这里插入图片描述

在函数定义中的str是目标字符串的地址,sep是分隔符的地址。
在使用这个函数之前我们需要知道这个隐藏的使用规则。
strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
如果字符串中不存在更多的标记,则返回 NULL 指针。
有以上规则我们可以敲一个例子:

int main()
{
   
	const char* p = "@.";
	char arr[] = "123456789@qq.com";
	char buf[50] = {
    0 }; //123456789@qq.com
	strcpy(buf, arr);
	char* str = NULL;
	//1、已知字符串情况下
	str = strtok(arr, p);//123456789
	printf("%s\n", str);
	str = strtok(NULL, p);//qq
	printf("%s\n", str);
	str = strtok(NULL, p);//com
	printf("%s\n", str);
	//之后返回NULL

	//2、未知字符串情况
	for (str = strtok(buf, p); str != NULL; str = strtok(NULL, p))
	{
   
		printf("%s\n", str);
	}

	return 0;
}

注:当我们知道字符串的时候我们可以确定使用strtok的此时,当未知字符串我们可使用for循环来完美实现。(第二种方法可以包含第一种)
运行结果:
在这里插入图片描述

2、strerror函数

报错函数
我们先来实现报错:

#include <errno.h>
int main()
{
   
	int i = 0;
	for (i = 0; i < 10; i++)
	{
   
		printf("%s\n", strerror(i));
	}
	return 0;
}

运行结果:
在这里插入图片描述
同时strerror函数有一个头文件与之对应—#include <errno.h>
然后我们再举一个现实的例子:

#include <errno.h>
int main()
{
   
	FILE* p =  fopen("test.txt", "r");
	//当库函数使用发生错误会把errno这个
	//全局的错误遍历设置为本次库函数产生的
	//错误码
	//errno是C语言提供的一个全局变量,可直接使用,头文件errno.h

	if (NULL == p)
	{
   
		printf("%s\n", strerror(errno));
		return 0;
	}
	//........
	//关闭文件
	fclose(p);
	p = NULL;
	return 0;
}

此时我的工程内并没有这个test.txt文件。我们当然读取不到,所以就会报错,我们可以用strerror这个函数来找到报错原因。
运行结果:
在这里插入图片描述

3、字符串分类函数

在这里插入图片描述
这个函数也有自己的头文件—#include <ctype.h>。
例子:

//字符判断函数
int main()
{
   
	printf("%d\n", isspace('!'));//0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值