#include <stdio.h>
#include <string.h>
//void* memchr(const void* str, int c, size_t n)
//在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
//返回一个指向匹配字节的指针,如果在给定的内存区域未出现字符,则返回 NULL。
void test_memchr()
{
const char str[] = "http://www.baidu.com";
const char ch = ‘a‘;
char* ret;
ret = (char*)memchr(str, ch, strlen(str));
if (ret != NULL)
{
printf("[%c] 之后的字符串是 [%s]\n", ch, ret+1);
}
else
{
printf("not found [%c] in [%s]\n", ch, str);
}
}
//int memcmp(const void* str1, const void* str2, size_t n))
//把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
//如果返回值 > 0,则表示 str1 大于 str2。
//如果返回值 = 0,则表示 str1 等于 str2。
//如果返回值 < 0,则表示 str1 小于 str2。
//ASCII:
//a - z: 97 - 122
//A - Z: 65 - 90
//0 - 9: 48 - 57
void test_memcmp()
{
char str1[15];
char str2[15];
int ret;
memcpy(str1, "abcdef", 6);
memcpy(str2, "ABCDEF", 6);
ret = memcmp(str1, str2, 5);
if (ret > 0)
{
printf("str1 > str2, str1: %s, str2: %s\n", str1, str2);
}
else if (ret < 0)
{
printf("str1 < str2, str1: %s, str2: %s\n", str1, str2);
}
else
{
printf("str1 == str2, str1: %s, str2: %s\n", str1, str2);
}
}
//void* memcpy(void* str1, const void* str2, size_t n)
//从存储区 str2 复制 n 个字节到存储区 str1。
void test_memcpy()
{
const char src[50] = "http://www.baidu.com";
char dest[50];
memcpy(dest, src, strlen(src) + 1);
printf("src = %s, dest = %s\n", src, dest);
char d[20];
memcpy(d, src + 11, 5);// 从第 11 个字符开始复制,连续复制 5 个字符
// 或者 memcpy(d, s+11*sizeof(char), 6*sizeof(char));
d[5] = ‘\0‘;
printf("%s\n", d);
}
//void* memmove(void* str1, const void* str2, size_t n)
//从 str2 复制 n 个字符到 str1。
//若存在重叠内存块,memmove() 比 memcpy() 更安全。
//如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。
//如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
void test_memmove()
{
char dest[] = "oldstring";
char src[] = "newstring";
printf("Before memmove(): dest = %s, src = %s\n", dest, src);
memmove(dest, src, 9);
printf("After memmove(): dest = %s, src = %s\n", dest, src);
}
//void* memset(void* str, int c, size_t n)
//复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
void test_memset()
{
char str[50];
strcpy(str, "This is string.h library function");
printf("before memset(): %s\n", str);
memset(str, ‘$‘, 7);
printf("after memset(): %s\n", str);
}
int main()
{
printf("test_memchr():\n");
test_memchr();
printf("\ntest_memcmp():\n");
test_memcmp();
printf("\ntest_memcpy():\n");
test_memcpy();
printf("\ntest_memmove():\n");
test_memmove();
printf("\ntest_memset():\n");
test_memset();
return 0;
}
程序输出结果:
test_memchr():
[a] 之后的字符串是 [idu.com]
test_memcmp():
str1 > str2, str1: abcdef, str2: ABCDEF
test_memcpy():
src = http://www.baidu.com, dest = http://www.baidu.com
baidu
test_memmove():
Before memmove(): dest = oldstring, src = newstring
After memmove(): dest = newstring, src = newstring
test_memset():
before memset(): This is string.h library function
after memset(): $$$$$$$ string.h library function
C语言string.h中的memcpy(), memmove(), memset()等函数
原文:https://www.cnblogs.com/liutongqing/p/13373746.html