当前位置: 首页 > news >正文

memset与strcpy区别

strcpy是“拷贝字符串”,memset是“按字节填充内存”。

strcpy:复制字符串

函数原型是:

char *strcpy(char *dest, const char *src);

作用:把src字符串复制到dest里面,包括最后的\0

例子:

#include <stdio.h> #include <string.h> int main() { char arr[20]; strcpy(arr, "hello"); printf("%s\n", arr); return 0; }

结果:

hello

这里arr里面实际存的是:

'h' 'e' 'l' 'l' 'o' '\0'

所以strcpy适合处理字符串

memset:把一块内存全部设置成某个字节

函数原型大概是:

void *memset(void *ptr, int value, size_t num);

作用:从ptr开始,把后面num个字节都设置成value

例子:

#include <stdio.h> #include <string.h> int main() { char arr[20]; memset(arr, 0, sizeof(arr)); return 0; }

这句的意思是:

memset(arr, 0, sizeof(arr));

arr这 20 个字节全部清零。

所以memset常用于:

memset(arr, 0, sizeof(arr)); // 清空字符数组 memset(buf, 0, sizeof(buf)); // 清空缓冲区 memset(dp, -1, sizeof(dp)); // 算法里初始化数组为 -1

3. 最大区别

对比

strcpy

memset

作用

复制字符串

填充内存

处理对象

字符串

任意内存

是否关心\0

关心,遇到\0停止

不关心,按字节数量填

第三个参数

没有

填多少个字节

常见用途

"hello"拷贝进数组

清零、初始化数组


4. 对比例子:很关键

strcpy

char arr[20]; strcpy(arr, "abc");

结果类似:

arr: a b c \0 ? ? ? ? ...

它只复制"abc"和最后的\0


memset

char arr[20]; memset(arr, 'A', sizeof(arr));

结果是:

arr: A A A A A A A A A A A A A A A A A A A A

它不管字符串结束符,只负责填 20 个字节。

如果你这时候:

printf("%s\n", arr);

可能出问题,因为里面没有\0,它不知道字符串在哪里结束。

memset(arr, 0, sizeof(arr))为什么常见?

因为字符数组清零之后,全是:

'\0' '\0' '\0' '\0' ...

这时候它天然就是一个空字符串。

char arr[20]; memset(arr, 0, sizeof(arr)); printf("%s\n", arr);

输出为空,不会乱跑。

memset是按字节填

这个要特别注意 ⚠️

int arr[10]; memset(arr, 1, sizeof(arr));

你可能以为每个 int 都变成1,但不是。

因为memset是按字节填充,把每一个字节都填成0x01

一个int通常 4 字节,所以每个 int 变成:

0x01010101

十进制是:

16843009

所以初始化int数组时:

memset(arr, 0, sizeof(arr)); // 可以 memset(arr, -1, sizeof(arr)); // 通常可以 memset(arr, 1, sizeof(arr)); // 不建议,结果不是每个元素为 1
strcpy:string copy,字符串复制 memset:memory set,内存设置

更直观一点:

strcpy(arr, "hello");

意思是:

把 hello 这个字符串放进 arr
memset(arr, 0, sizeof(arr));

意思是:

把 arr 这块内存全部刷成 0

最常用搭配就是:

char arr[100]; memset(arr, 0, sizeof(arr)); // 先清空 strcpy(arr, "hello"); // 再放字符串
http://www.jsqmd.com/news/1022954/

相关文章:

  • 2026年最新微软官方全国售后网点地址更新报告 - GrowthUME
  • 平顶山好吃的火锅推荐榜单!平顶山火锅推荐榜本土标杆
  • 2026杭州西湖卖包指南!迪奥回收价差密码,内行从不外露 - 逸程
  • 软考数据库系统工程师备考指南:从原理到实战的完整攻略
  • Digital数字电路设计工具:从逻辑门到完整处理器的可视化仿真平台
  • paperxie 期末结课论文救星!课程论文 AI 智能写作一站式解决期末周写作难题
  • Gemini 3.5 Flash国内接入实战:直连误区、代理方案与成本优化
  • 【JAVA毕设源码分享】基于springboot的高校大学生交友平台(程序+文档+代码讲解+一条龙定制)
  • Python岗25 年高频面试题
  • 百考通AI技术:精准贴合不同场景的调研需求,让问卷设计从“耗时耗力”到“一键生成”的高效赋能
  • 2026年安徽省哪所中职学校有酒店管理专业?哪些学校值得报? - 小张zc
  • WeChatExporter:从iOS备份中提取微信聊天记录的完整技术方案
  • SMUDebugTool:深入AMD Ryzen处理器的硬件级调试与性能调优方案
  • 郑州二七闲置黄金出手 合扬正规回收 交易安全 - 开心测评
  • 2026浙江|石油化工耐高压非标异形件|极端工况适配 - 年度推荐企业名录
  • 用Python做一套上位机是一种什么体验
  • CPU飙到100%怎么排查?DBA手把手教你从top到慢查询定位根因
  • 一氧化碳分析仪/二氧化碳浓度检测仪怎么选?西安诺科仪器领跑国产替代 - 品牌推荐大师1
  • 2026最新东莞黄金回收价格表 - 润富黄金回收
  • Docker Scout:构建时容器镜像安全扫描原理与工程实践
  • 终极飞书文档批量导出工具:3分钟搞定700+文档迁移的完整方案
  • ARM 汇编优化:NEON 指令与内存访问的实战技巧
  • 唐山GEO优化找哪家公司靠谱?
  • 2026年临泉县装修品牌深度解析 常三亿等多家实力对比 - 国麟测评
  • Windows凭据安全:从DPAPI原理到mimikyu攻击的攻防实战
  • 边缘 AI 推理框架:从 TFLite Micro 到 NCNN 的嵌入式部署实战
  • 稠密向量技术全解析:从Embedding原理到Faiss向量检索实战
  • 嵌入式性能监控实战:从硬件计数器到系统级瓶颈定位
  • Android全栈体系150讲-53【终极重写深度版】千万级App组件化架构内核源码级实战
  • 从手动刷新到智能抢票:基于Selenium的大麦网自动化购票方案解析