You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复sprintf写入终止空字符超出目标的[-Wformat-overflow=]警告

问题原因

你的gsErrLog.aPrgmNm是长度为15的字符数组,但sprintf使用%-15.15s格式时,会输出最多15个字符,再自动追加一个终止符\0,总共需要16个字节的空间,数组只有15个字节容量,因此触发了溢出警告。

修复方案

三种可行的修复方式,按需选择:

  • 扩容数组:把数组长度改成16,这样能容纳15个字符加终止符,完全匹配原格式需求:char gsErrLog.aPrgmNm[16];
  • 调整格式符限制:将%-15.15s改为%-14.14s,最多输出14个字符,加上终止符刚好占15字节,不会溢出
  • 改用安全函数snprintf:直接指定缓冲区大小,即使格式符写15,它也会自动截断内容保证不越界,代码修改为:
snprintf(gsErrLog.aPrgmNm, sizeof(gsErrLog.aPrgmNm), "%-15.15s", pzArgv[0]);

内容的提问来源于stack exchange,提问作者안수진

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:25:23