字符串函数
本文中将会介绍memmove、memset、strpbrk、strrev命令。
memmove
其语法结构为。
void *memmove(void *dest, const void *src, unsigned int count);
功能均为由src所指内存区域复制count个字节到dest所指内存区域。src和dest所指内存区域可以重叠,但复制后src内容会被更改。函数返回指向dest的指针。
char a[32]= "welcome to my blog!", b[32];
memmove(b, a+1, 20);
cout << a<< endl;
cout << b<< endl;
运行以上程序可以得到如下结果。
如图所示,本程序将a[1]到a[20]之间的内容拷贝到了b。由于b未经过初始化,在其后部分的内容是随机值,输出后便成为了“烫”。
memset
其语法结构为void *memset(void *buffer, int c, int count);
功能也比较简单,是把buffer所指内存区域的前count个字节设置成字符c。然后返回指向buffer的指针。
执行以下代码。
char str[] = "hallo world!";
memset(str, 'K', 5);
cout << str << endl;
可得到以下结果。
strpbrk
其语法结构为char *strpbrk(char *s1, char *s2);
功能为在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内。返回指向s1中第一个相匹配的字符的指针,如果没有匹配字符则返回空指针NULL。
char str1[] = "hallo world!";
char str2[] = "wellcome";
cout << *strpbrk(str1, str2) << endl;
运行以上代码,运行结果如图所示。
当然,这是输出的‘l’,并非1。如果未找到的话会输出NULL,这样执行以上代码就会崩溃掉,因此在解引用时必须判断其是否为空。
strrev
其语法结构为char *strrev(char *s);
功能是把字符串s的所有字符的顺序颠倒过来(不包括空字符NULL)。然后返回指向颠倒顺序后的字符串指针。
char str[] = "hallo world!";
char *a = strrev(str);
cout << a << endl;
str[6] = '\0';
char *b = strrev(str);
cout << b << endl;
如图所示,该函数是在原地址的基础上进行修改的,故第二次输出是与str尾部的顺序相同。
注意
本文使用的操作系统是Windows 7 64位处理器。
使用的软件是Microsoft visual studio 2015
在使用字符函数的时候,应该在源文件中添加以下命令
#include <string.h>