C语言常见函数

常见复制/拷贝函数

1)strcpy(dst, src):基础复制(不安全

  • 作用:把src(含末尾\0)复制到dst
  • 终止符:一定会复制\0(前提:src自身是以\0结尾的字符串)
  • 返回值:返回dst
  • 长度语义:不检查dst容量,只要遇到\0才停
  • 常见误区:dst缓冲区不够会溢出;

2)strncpy(dst, src, n):限定长度复制。

  • 作用:最多复制src的n个字符到dst
  • 终止符:不保证dst以\0结尾
  • 规则:strlen(src) < n,复制+补\0;若strlen(src) >=n,只复制前n个字节,不加补\0
  • 返回值:dst
  • 常见误区:strlen(src) >=n时,dst会没有\0,后续字符串会越界

3)strcpy_s(dst, src, n):安全复制

  • 终止符:在成功时保证dst以\0为结尾
  • 返回值:errno(0表示成功,非0表示错误)
  • 长度语义:会检查dst的dstsz
  • 错误处理:若参数无效/空间不够等,通常会把 dst 置为空字符串

4)strlcpy(dst, src, n):BSD 风格安全复制(常用但非标准 C)

  • 终止符:只要dstsz >0,就保证dst以\0结尾
  • 返回值:返回strlen(src),源字符串长度
  • 长度语义:最多复制dstsz-1个字符,然后写\0
  • 截断检测:若返回值 >=dstsz说明发生了截断

5)snprintf(dst, dstsz, "%s", src):标准、安全、可移植

  • 作用:格式化输出到dst,用 "%s" 时常作为安全字符串复制
  • 终止符:若dstsz >0,就保证dst以\0结尾
  • 返回值:返回本来应该写入的字符数;若返回值 >=dstsz说明发生了截断
  • 长度语义:最多写dstsz-1个字符+ \0

6)memcpy(dst, src, n):原始内存拷贝。

  • 作用:复制 n 个字节 原始内存
  • 终止符:不会管 \0,也不关心字符串
  • 返回值:返回dst
  • 适用于:结构体/数组/二进制块复制

字符串清空方式

1)buf0 = '\0'

  • 含义:把字符串长度置为 0
  • 优点:O(1),最快
  • 注意:只是"看起来空了",后面的旧内容仍在内存里

2)buf0 = 0; 与1)一致

3)memset(buf, 0, sizeof(buf)) 物理清零

  • 含义:把整个缓冲区都置 0(包括旧数据)
  • 优点:适合需要把残留内容也抹掉的场景
  • 注意 :对 char* buf(指针)不能用 sizeof(buf) 得到长度;那只会是指针大小
    必须用"真实容量"变量

4)strcpy(buf, "") 或 buf0='\0'

相关推荐
番茄灭世神10 小时前
汇顶模拟前端GH3220使用备忘录
c语言·单片机·传感器·模拟芯片·电生理信号处理
我是唐青枫10 小时前
C#.NET PInvoke 深入解析:封送、内存布局与原生互操作实战
开发语言·c#·.net
程序猿编码10 小时前
纯C++轻量计算机视觉推理引擎:基于GGML的端侧CV模型部署技术全解析
开发语言·c++·计算机视觉·大模型·transformer
SEO_juper10 小时前
外贸多语言站最隐蔽的流量杀手:hreflang 错了,谷歌把德语页推给美国人(附审计脚本)
开发语言·前端·python·seo·独立站·谷歌优化
geovindu11 小时前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
Tairitsu_H11 小时前
[C++] C++11新增构造:列表初始化和std::initializer_list
开发语言·c++·c++11·构造
宣宣猪的小花园.11 小时前
【嵌入式】故障与降级:看门狗、保护机制和工程可靠性的底线
开发语言·人工智能·嵌入式硬件·机器学习
shmily麻瓜小菜鸡11 小时前
JS/TS 易踩坑知识点 — 自动分号插入(ASI)
开发语言·javascript·ecmascript
CoderYanger11 小时前
前端基础——JavaScript(WebAPI)代码案例
java·开发语言·前端·javascript·css·前端框架·html5
geovindu11 小时前
CSharp: Task Scheduler
开发语言·后端·c#·.net·.netcore