如何修复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,提问作者안수진
相关产品推荐
相关产品推荐

