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

FFmpeg源码:av_strlcpy函数分析

一、引言

在C/C++编程中经常会用到strcpy这个字符串复制函数。strcpy是C/C++中的一个标准函数,可以把含有'\0'结束符的字符串复制到另一个地址空间。但是strcpy不会检查目标数组dst的大小是否足以容纳源字符串src,如果目标数组太小,将会导致缓冲区溢出。针对该问题很多C/C++开源库都会选择自己实现strcpy函数来保证安全性。而FFmpeg自定义了av_strlcpy函数,在实现strcpy函数功能的同时保证不会造成缓冲区溢出。

二、av_strlcpy函数的声明

av_strlcpy函数声明在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavutil/avstring.h中:

/*** Copy the string src to dst, but no more than size - 1 bytes, and* null-terminate dst.** This function is the same as BSD strlcpy().** @param dst destination buffer* @param src source string* @param size size of destination buffer* @return the length of src** @warning since the return value is the length of src, src absolutely* _must_ be a properly 0-terminated string, otherwise this will read beyond* the end of the buffer and possibly crash.*/
size_t av_strlcpy(char *dst, const char *src, size_t size);

该函数的作用是:在已知dst缓冲区大小并不会造成缓冲区溢出前提下,将src地址开始的字符串复制到以dst开始的地址空间。

形参dst:输出型参数,目的字符串开始的指针(即目标缓冲区)。

形参src:输入型参数,源字符串的开始地址。

形参size:输入型参数,dst缓冲区的大小。

返回值:src字符串的大小。

三、av_strlcpy函数的定义

av_strlcpy函数定义在libavutil/avstring.c中:

size_t av_strlcpy(char *dst, const char *src, size_t size)
{size_t len = 0;while (++len < size && *src)*dst++ = *src++;if (len <= size)*dst = 0;return len + strlen(src) - 1;
}

四、参考

《百度百科——strlcpy》

http://www.lryc.cn/news/538537.html

相关文章:

  • Unity Shader学习6:多盏平行光+点光源 ( 逐像素 ) 前向渲染 (Built-In)
  • docker批量pull/save/load/tag/push镜像shell脚本
  • 五十天精通硬件设计第32天-S参数
  • 6.2.4 基本的数据模型
  • DeepSeek ,银行营销会被 AIGC 颠覆吗?
  • 第150场双周赛:好数字之和、分割正方形 Ⅰ、分割正方形 Ⅱ、最短匹配字符串
  • HDFS是如何存储和管理大数据
  • 进阶——第十六届蓝桥杯嵌入式熟练度练习(开发板捕获频率和占空比)
  • 智能协同:数据集成平台与DeepSeek驱动的数据分析与智能调度革新
  • Mybatis高级(动态SQL)
  • 申论对策建议类【2022江苏B卷第一题“如何开展网络直播”】
  • 蓝耘智算携手DeepSeek,共创AI未来
  • FFmpeg源码:url_find_protocol函数分析
  • 3D与2D机器视觉机械臂引导的区别
  • C# 添加图标
  • 基于 Python 和 Django 的北极星招聘数据可视化系统(附源码,部署)
  • 基于STM32、HAL库、MB85RC16PNF(I2C接口)驱动程序设计
  • 【产品推介】可驱动5A负载的降压型DC/DC转换器XBL1663
  • 20.【线性代数】——坐标系中,平行四边形面积=矩阵的行列式
  • 数据库知识速记:事物隔离级别
  • 重构测试项目为spring+springMVC+Mybatis框架
  • 如何使用OPENAI的Whisper功能进行音频字母提取功能
  • DFS算法篇:理解递归,熟悉递归,成为递归
  • 2025java常见面试题第一弹
  • JMeter工具介绍、元件和组件的介绍
  • 机舱卫生和空气质量改善
  • springBoot之环境变量
  • 萨班斯-奥克斯利法案(Sarbanes-Oxley Act, SOX):公司财务透明度的守护者(中英双语)
  • iOS 中使用 FFmpeg 的高级功能 - 滤镜(Filters)
  • tomcat html乱码