目录

前言

接上篇:

1.7 strtok

1.8 strerror

1.9 字符分类函数

总结


前言

        C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。

        字符串常量适用于那些对它不做修改的字符串函数。

接上篇:

1.7 strtok

字符函数和字符串函数(C语言进阶)(三)-LMLPHP

        此函数用于切割字符串

        看一个例子来理解:

#include <stdio.h>
#include <string.h>
int main()
{
	const char* sep = "@.";
	char email[] = "pengxiaoyao@csdn.com";
	char cp[30] = {0};
	strcpy(cp, email);
	char* ret = strtok(cp, sep);
	printf("%s\n", ret);
	ret = strtok(NULL, sep);
	printf("%s\n", ret);
	ret = strtok(NULL, sep);
	printf("%s\n", ret);
	return 0;
}

效果如下: 

字符函数和字符串函数(C语言进阶)(三)-LMLPHP

        strtok是用于分割字符串的函数,它的参数有两个,第一个是传过去的是需要分割的字符串,在这个例子里面就是“pengxiaoyao@csdn.com”,第二个参数是分割标记,上面的例子传过去的是一个指针,内容为“@.”,有多少个分割标记就在里面放多少个元素。需要注意的是,我们需要将被分割的字符串拷贝一份作为参数传递,因为strtok函数作用会改变被分割的字符串的内容。

        下面是使用方法介绍,我们在例子中可以看到,我第一次先将cp(需要分割的字符串的拷贝)和sep(分割标记)传参过去,这样就能执行第一次分割,结果就为“pengxiaoyao”;然后第二次我们进行分割时,传参传了NULL和分割标识sep,这是因为在第一次分割后,字符串第一个被找到的标识“@”被改成了‘\0’,我们传一个NULL是作为一个标志,告诉strtok函数这不是第一次分割,是接着上一次分割往下继续。因此,我们使用strtok函数,除了第一次传递被分割字符串地址,后面都用NULL即可。第二次分割输出值为"csdn",即'@'和'.'之间的内容,第三次分割同理,得到最后的"com"。

        提问,明明NULL指针什么都没指向,那strtok怎么找到的地址进行处理呢?

        其实是因为这个函数在第一次被调用后,就记下了被分割的字符串的地址,这个函数是有记忆功能的。什么原理?用到了静态变量可以实现。

1.8 strerror

字符函数和字符串函数(C语言进阶)(三)-LMLPHP

        strerror叫错误报告函数。功能是返回错误码所对应的信息。

        c语言三的函数库,在执行失败的时候,都会设置错误码:0 1 2 3 4 5 6 7 8....每一种数字都代表一种错误信息,0代表没有错误,1代表一种类型的错误,2代表另一种....

        但是我们只知道错误码,不清楚里面的信息,于是我们可以将错误码传给strerror函数,它就会返回错误信息。

        举个例子:

#include <stdio.h>
#include <string.h>
int main()
{
	printf("%s\n", strerror(0));
	printf("%s\n", strerror(1));
	printf("%s\n", strerror(2));
	printf("%s\n", strerror(3));
	printf("%s\n", strerror(4));
	printf("%s\n", strerror(5));
	printf("%s\n", strerror(6));
	return 0;
}

看此代码输出:字符函数和字符串函数(C语言进阶)(三)-LMLPHP

        说明0代表no error(没有错误);1代表Operation not permitted(操作不允许).....以此类推3 4 5 6 的错误信息都打印了出来。

1.9 字符分类函数

字符函数和字符串函数(C语言进阶)(三)-LMLPHP

        这些函数比较易懂,就不举例了。

总结

        到此就将所有的字符串函数讲解完成了,希望对你有所帮助!

02-26 17:28