用 snprintf / asprintf 取代不安全的 sprintf
摘自:https://blog.csdn.net/yhtoo/article/details/46943727
asprintf 第一个参数是指向指针的指针,它会在heap中自动申请空间(最后要手动free)。使用asprintf ,要加上 #define _GNU_SOURCE
int asprintf(char **strp, const char *fmt, ...); int vasprintf(char **strp, const char *fmt, va_list ap); 描述 函数 asprintf()和 vasprintf()是 sprintf(3)和 vsprintf(3)的对等物,除了它们分配一个包括结尾空字符在内的足够大的输出内存,并且通过其第一个参数返回。这个指针应该传给 free(3)以在不再使用时释放它。 返回值 当成功时,如同 sprintf(3)一样,这些函数返回打印的字节个数。如果内存分配失败,或者其它错误发生了,这些函数返回 -1,并且 strp 的内容是未定义的。
#define _GNU_SOURCE /* See feature_test_macros(7) */ #include <stdio.h> // int asprintf(char **strp, const char *fmt, ...); int main(int argc, char *argv[]) { char *c = NULL; t = asprintf(&c, "%s:%d", "abc", 123); if (t == -1) { printf("error occor"); } free(c); return; }
标签:
linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2018-12-28 搭建自己的MQTT服务器
2018-12-28 Linux编程实现蜂鸣器演奏康定情歌
2018-12-28 linux c MQTT客户端实现
2016-12-28 最详细的Log4j使用教程