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

C语言中“format string is not a string literal (potentially insecure)”警告求解

问题解释与解决办法

警告含义

你收到的「format string is not a string literal (potentially insecure)」警告,核心原因是不该把用户输入的变量直接当作fprintf的格式字符串。

fprintf的第二个参数设计为固定格式的字面量(比如"%s"),如果传入用户可控的内容(比如你代码里的fcontents),一旦用户输入包含%d、%s这类格式占位符,程序会错误地从内存中读取额外数据,轻则崩溃,重则被利用引发安全问题,所以编译器会抛出这个警告提示风险。

解决办法

有两种简单可靠的修复方式:

方式1:用fputs替代fprintf

fputs的作用就是直接输出字符串到文件,不需要格式解析,完美匹配你的需求:

// 替换原来的 fprintf(fpointer, fcontents);
fputs(fcontents, fpointer);

方式2:规范使用fprintf的格式字符串

如果坚持用fprintf,把格式字符串写成固定的字面量"%s",再把fcontents作为参数传入:

// 替换原来的 fprintf(fpointer, fcontents);
fprintf(fpointer, "%s", fcontents);

额外提示

你的代码里还有两个小问题可以优化:

  • scanf("%s")会在遇到空格、换行时停止读取,用户输入带空格的内容会被截断,建议改用fgets读取输入;
  • fname和fcontents的数组长度是20,要注意用户输入过长会导致缓冲区溢出,最好在scanf里限制长度,比如scanf("%19s", fname)(留1个位置存字符串结束符\0)。

内容的提问来源于stack exchange,提问作者user18326065

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:54:58