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

winegcc编译时swprintf未格式化仅复制字面量格式串的原因是什么?

swprintf占位符不生效问题原因与解决方法

核心原因

该问题是Windows与类Unix平台对swprintf的格式化占位符规范不兼容导致的,具体差异如下:

  • 微软Windows的C运行时(CRT)规定:swprintf中的%s占位符默认匹配窄字符字符串(char*类型),宽字符串(wchar_t*类型)需要用%ls占位符匹配
  • 类Unix平台(比如你使用的Ubuntu)的glibc标准库规定:swprintf中的%s占位符默认匹配宽字符串(wchar_t*类型),窄字符串才需要用%ls匹配

你使用winegcc做交叉编译时,编译阶段调用的是Ubuntu侧的头文件与语法检查逻辑,会默认认可你代码中%s匹配宽字符串的写法;但最终生成的是Windows平台程序,运行时实际调用的是Windows CRT的swprintf实现,Windows侧无法识别%s匹配宽字符串的规则,就会导致占位符解析失败,直接输出原字面量内容。

修复方案

将占位符修改为双平台通用的%ls即可:

swprintf(cell, 100, L"Hello %ls", L"world");

%ls在Windows和类Unix的swprintf实现中,都统一表示匹配宽字符串,交叉编译场景下也可以正常完成占位符替换。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:30:00