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

为什么这段调用sprintf_s的C语言代码会抛出访问异常?

问题原因

你使用的安全版本字符串格式化函数sprintf_s的传参方式不符合要求:

  • 微软实现及C标准Annex K定义的sprintf_s,和传统sprintf的参数列表不同,当第一个参数为目标缓冲区指针时,必须在格式字符串之前传入缓冲区的最大可用长度作为第二个参数。
  • 你当前的调用漏传了缓冲区长度参数,导致函数参数解析完全错位:将格式字符串"%s"的地址识别为缓冲区长度,将filePrefix识别为格式字符串,后续内部内存访问逻辑完全错乱,最终触发0xC0000005写入访问违例异常。

修复方案

补上缓冲区长度参数即可,示例如下:

char filePrefix[] = "test";
char fileName[100]; 
fileName[0] = 0;
// 第二个参数传入缓冲区总大小
sprintf_s(fileName, sizeof(fileName), "%s", filePrefix);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:01