C语言string.h中的memcpy(), memmove(), memset()等函数
#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
作者:
tongqingliu
出处: http://www.cnblogs.com/liutongqing/
本文版权归作者和博客园共有,欢迎转载、交流,但未经作者同意必须保留此段声明,且在文章明显位置给出原文链接。
如果觉得本文对您有益,欢迎点赞、欢迎打赏。
出处: http://www.cnblogs.com/liutongqing/
本文版权归作者和博客园共有,欢迎转载、交流,但未经作者同意必须保留此段声明,且在文章明显位置给出原文链接。
如果觉得本文对您有益,欢迎点赞、欢迎打赏。


分类:
C/C++
posted on 2020-07-24 18:41 tongqingliu 阅读(133) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构