每天学一点库函数9

字符串函数

本文使用的操作系统是Windows 7 64位处理器。
使用的软件是Microsoft visual studio 2015
在使用字符函数的时候,应该在源文件中添加以下命令
#include <string.h>

memccpy

本函数的语法结构为:
void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count);
其功能是由src所指区域内复制不多于count个字节到dest所指内存区域,如果遇到字符ch则停止复制。返回指向字符ch后的第一个字符的指针,如果src前count个字节中不存在ch则返回NULL。

	char *s = "Golden Global View";
	char d[20], *p;
	p = (char*)memccpy(d, s, 'i', strlen(s));
	if (p)
	{
		*p = '\0';      // MUST Do This
		cout << "the result is " << d << endl;
	}
	else
	{
		cout << "Char not found." << endl;
	}

其中,如果src前count个字节中存在ch并成功复制之后,字符串dest是不包含‘\0’的,也就是说访问dest时会超出范围,所以一定要在其后添加‘\0’,即返回的指针所指的地址。
当然,也需要注意dest的长度要大于count ,否则也会超出范围。
在这里插入图片描述

memchr

本函数的语法结构为:
void *memchr(void *buf, char ch, unsigned count);
其功能为从buf所指内存区域的前count个字节中查找字符ch,当第一次遇到字符ch时停止查找,如果找到的话,返回指向ch的指针,否则返回NULL。

	char *s = "Hello, Programmers!";
	char *p;
	p = (char*)memchr(s, 'P', strlen(s));
	if (p)
		cout << p << endl;
	else
		cout << "Not Found!" << endl;

运行以上函数,会输出字符‘P’所指向的指针,但是在C++中会按照字符串的格式进行输出。如图所示,输出了“Programmers!”。
在这里插入图片描述

memcmp

本函数的语法结构为:
int memcmp(void *buf1, void *buf2, unsigned int count);
其功能是比较内存区域buf1和buf2的前count个字节,当buf1的ASCII码值小于buf2的ASCII码时,返回负值。等于的话返回0值,大于的话返回正数。

	char ch1[] = { "abcd" }, ch2[] = { "abcd" }, ch3[] = { "bcde" };
	cout << "memcmp(ch1,ch2,strlen(ch1));" << memcmp(ch1, ch2, strlen(ch1)) << endl;
	cout << "memcmp(ch1,ch3,strlen(ch1));" << memcmp(ch1, ch3, strlen(ch1)) << endl;
	cout << "memcmp(ch3,ch1,strlen(ch1));" << memcmp(ch3, ch1, strlen(ch1)) << endl;

在这里插入图片描述
如图所示,输出的分别是0,-1,1。

memcpy

本函数的语法结构为:
void *memcpy(void *dest, void *src, unsigned int count);
其功能为由src所指内存区域复制count个字节到dest所指的内存区域。并且二者所指内存区域不能重叠,函数返回指向dest的指针。
该函数和之前的memccpy相似,复制时不包含‘\0’,所以要手动添加。

	char *s = "Golden Global View";
	char d[20];
	memcpy(d, s, strlen(s));
	d[strlen(s)] = 0;
	cout << d << endl;

在这里插入图片描述

memicmp

本函数的语法结构为:
int memicmp(void *buf1, void *buf2, unsigned int count);
其功能为比较内存区域buf1和buf2的前count个字节但不区分字母的大小写。
memicmp同memcmp的唯一区别是memicmp不区分大小写字母。

	char ch1[] = { "abcd" }, ch2[] = { "ABCD" }, ch3[] = { "bcde" };

	cout << "memicmp(ch1,ch2,strlen(ch1));" << memicmp(ch1, ch2, strlen(ch1)) << endl;
	cout << "memicmp(ch1,ch3,strlen(ch1));" << memicmp(ch1, ch3, strlen(ch1)) << endl;
	cout << "memicmp(ch3,ch1,strlen(ch1));" << memicmp(ch3, ch1, strlen(ch1)) << endl;

在这里插入图片描述
如图所示,虽然改变了大小写,但是结果不受大小写的影响。

Ω ~未完待续

猜你喜欢

转载自blog.csdn.net/ichliebecamb/article/details/85761754