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中:

cpp 复制代码
/**
 * 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中:

cpp 复制代码
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

相关推荐
siv774 小时前
影视解说视频智能生产全链路方案解析:从脚本生成到多平台分发
ffmpeg·srt字幕·ai剪辑·影视解说·ai电影解说·视频自动切割·字幕文件解析
独占的甜蜜4 小时前
从FLAC到WAV:whisper.cpp中的FFmpeg音频预处理全解析过程
ffmpeg·whisper·音视频
独占的甜蜜4 小时前
从FLAC到WAV:whisper.cpp中的FFmpeg音频预处理全解析
ffmpeg·whisper·音视频
JMchen1231 天前
集成第三方 C/C++ 库到 Android NDK 项目:OpenCV 与 FFmpeg 实战指南
opencv·ffmpeg·音视频开发·cmake·jni·ndk·abi 兼容性
qcx231 天前
【AI Agent实战】 0 成本视频处理全流程:ffmpeg + whisper 实现去水印、双语字幕、品牌片尾 | 实战SOP
人工智能·ffmpeg·音视频
huxiao_06011 天前
Windosw下VS 2022编译FFmpeg(支持x264、x265、fdk-acc)
ffmpeg·音视频
小驴程序源3 天前
TS 分片合并完整教程
python·ffmpeg
鬼蛟4 天前
Spring Cloud Alibaba
ffmpeg·bootstrap
米优4 天前
ffmpeg实现解码h264/h265裸码流
ffmpeg
好家伙VCC5 天前
**发散创新:基于FFmpeg的视频编码优化实践与实战代码解析**在现代多媒体系统中,
java·python·ffmpeg·音视频