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

VS2022开发Windows原生C应用时sprintf_s链接错误求助

问题分析与解决

核心错误原因

你混淆了ANSI字符与宽字符版本的格式化函数:

  • 代码中使用了WCHAR(宽字符类型)和宽格式字符串L"...",但调用的是针对ANSI字符(char)的sprintf_s,宽字符场景下对应的正确函数是swprintf_s。
  • 你手动声明的sprintf_s是ANSI版本,与实际调用的宽字符参数类型不匹配,反而会干扰编译器的函数匹配,导致链接错误。

解决步骤

  • 替换函数为宽字符版本:将sprintf_s替换为swprintf_s,这是宽字符对应的安全格式化函数。
  • 移除手动函数声明:删掉你手动添加的sprintf_s声明,直接包含标准头文件<wchar.h>或<stdio.h>即可(VS环境中这两个头文件都包含swprintf_s的正确声明)。
  • 可选优化:用_countof(str)代替手动输入的255,避免数组大小修改后出现不一致问题。

修正后的代码示例

#include <wchar.h>

WCHAR str[255];
swprintf_s(str, _countof(str), L"ERROR: Unable to open keyboard device. Error code: %02x", status);

额外说明

Windows CRT的字符串函数遵循固定命名规则:宽字符版本以w开头(如swprintf_s、wcslen),ANSI版本无前缀(如sprintf_s、strlen)。开发时需根据使用的字符类型(char/WCHAR)选择对应版本,不要手动声明CRT函数,避免签名不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:40:25