VS2015中sprintf()和wsprintf()的格式差异

2024-01-30

我正在将一些代码从多字节移动到 unicode,并发现我的字符串格式出现错误。看起来 Visual Studio 2015 在 sprintf() 和 wsprintf() 之间处理宽度参数说明符“*”的方式不同。这是编译器错误或副作用,还是我错过了一些非常明显的东西?

下面的代码,带有输出:

char    cOutA [ 64 ];
wchar_t wcOutA [ 64 ];

sprintf ( cOutA, "Multibyte = %.*f\n", 3, 2.12345 );
wsprintf ( wcOutA, L"Unicode = %.*f\n", 3, 2.12345 );

printf ( cOutA );
wprintf ( wcOutA );

Output:

Multibyte = 2.123
Unicode = *f

我期望两者都能给我一个精确到小数点后三位的浮点数。我究竟做错了什么?


正如 Hans 在评论中提到的,答案是你永远不应该使用 wsprintf()。它总是被损坏,不支持与 C 标准“swprintf()”相同的格式参数,并且 Microsoft 文档没有明确说明它是如何损坏的或原因。

我只是在尝试调试相关函数时才发现这一点:wvsprintf()。该函数似乎具有相同的限制,并且也应该被它的工作替代品所取代:“vswprintf()”。名称与工作版本的相似性非常不幸,与标准 C 库函数和命名方法的明显相似性也是如此。我不知道为什么这些函数在 2017 年仍然提供,也不知道为什么 Microsoft 编译器在与不受支持的参数一起使用时不会像“sprintf()”那样生成警告。

我发布此内容是为了提高可见性,因为在 Google 上搜索这些功能似乎并没有让这些巨大的缺陷变得明显。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS2015中sprintf()和wsprintf()的格式差异 的相关文章

  • 使用 Tempdata 使我的应用程序崩溃

    我对 ASP NET 非常陌生 正在尝试在我在 Visual Studio 2015 中制作的 Web 应用程序中的两个控制器之间传递对象 该 Web 应用程序正在使用 ASP Net 5 预览模板 Web 应用程序 如果有帮助 我想我正在
  • 用于区分调试和发布版本的 CMake 变量或属性

    我想为调试和发布版本设置不同的 CMake 变量 我尝试像这样使用 CMAKE CFG INTDIR IF CMAKE CFG INTDIR STREQUAL Debug SET TESTRUNNER DllPlugInTesterd dl
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 如何让 Visual Studio 连接到 Windows 应用商店?

    我尝试在 Visual Studio 2015 中创建应用程序包以上传到 Windows 应用商店 但每次尝试连接到应用商店都会导致错误 An unexpected network error has occurred The app li
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • Visual C++ free 和 malloc 的线程安全性?

    有谁知道 free 和 malloc 在 Visual C 2010 上是否是线程安全的 我遇到了奇怪的问题 内存被损坏 我几乎认为这是唯一的可能性 有谁知道安全装置是否可以打开和关闭以及如何打开和关闭 前提是您链接的是线程安全库 http
  • Alpha 混合可消除图像中的接缝

    我缝合了两张图像 但在最终图像中存在可见的接缝 我正在尝试使用阿尔法混合去除那条接缝 我知道 Alpha 混合是使用cvAddweight 函数 但在此函数参数是两个图像 alpha beta gamma和目的地 我正在服用gamma 0
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 为什么我不能执行 std::map.begin() + 1?

    我有一个std map 我想从第二个条目开始迭代 我可以解决这个问题 但我对为什么 明显 语法无法编译感到困惑 该错误消息没有帮助 因为它指的是std string 我在这里没有使用它 这是一些代码 Suppose I have some
  • MSVC10 /MP 在项目中跨文件夹构建非多核

    我希望有人指出我们所遇到的错误或解决方法 使用 MP 编译项目时 似乎仅同时编译同一文件夹中的文件 我使用进程资源管理器来滑动命令行并确认行为 项目过滤器似乎对同时编译的内容没有影响 项目结构disk Folder project vcxp
  • 如何向 Visual Studio 项目添加其他库?

    Allegro 是一个用于图形操作的开源 C 插件库 如何将此库添加到我的编译器中 这些说明对我不起作用 因为我使用的是 Windows 7 我不知道操作系统是否重要 我有 Visual Studio Express 版本 该库是一个 dl
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • Nuget - 对象引用未设置为对象的实例

    我在 vs 2015 中遇到了 nuget 包管理器的问题 像Unity这样的一些包已经安装没有问题了 某些软件包 例如 EF 在安装时出现问题 像 Automapper 这样的一些软件包也有同样的问题 但是当我安装这个软件包的另一个版本时
  • Windows 10 中的 gacutil.exe 在哪里?

    我有Windows 10 专业版 64 位 微软视觉工作室 2015和完整的 Windows 10 SDK 包 but 我找不到 gacutil exe in Microsoft Visual Studio 2015 子目录 Windows
  • 适用于 Android 的 Visual Studio 2015 RC 模拟器无法启动

    我的 Android 版 Visual Studio 2015 RC 模拟器有问题 当我开始调试 F5 或 工具 gt Visual Studio Emulator for Android 时 模拟器未启动 该进程卡在 正在准备虚拟机 上
  • 获取模板lambda参数的返回值,如何简化代码?

    这是我的技巧 template
  • 从 C++ 源文件创建 Windows DLL

    我有多个 C 源文件 我想使用它们创建动态链接库 我在 linux 中使用 gcc shared 和 ln 看到这种情况发生 但是对于 Windows 我想我必须修改源文件才能生成 DLL 有没有办法用提供的源文件生成DLL 类似于linu

随机推荐

  • SDWebImage UIImageView+WebCache 在 64 位设备上崩溃

    我有这个代码 import
  • 在 ASP.NET MVC 中将复杂数据验证的数据管理规则放在哪里?

    我目前正在开发 ASP NET MVC2 项目 这是我第一次开发真正的 MVC Web 应用程序 这ASP NET MVC 网站 http www asp net mvc确实帮助我快速入门 但我仍然对数据模型验证有一些晦涩的知识 我的问题是
  • signalR :未生成 /signalr/hubs

    我可以得到这个tutorial http www asp net signalr overview getting started tutorial getting started with signalr在新项目中工作 但不在我现有的项目
  • 将字符嵌入图像中

    这就是我想做的 我对 matlab 完全陌生 我使用它才一天左右 这是我的老师要求我做的一些事情 使用 LSB 算法在图像中嵌入语句或字符串组 该字符串将从文件中读取 到目前为止 我还没有使用过任何文件操作 我正在尝试使用一个角色 但我不知
  • Value 对象应该包含多少业务逻辑? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我尊敬的一位导师认为简单的 bean 是浪费时间 值对象 必须 包含一些有用的业务逻辑 另一个人说这样的代码很难维护 并且所有业务逻辑都必须外部
  • 检查 Python 的“Counter”中的元素数量

    Python 2 7 3 1 引入了 Awesomecollections Counter 我的问题 如何计算计数器有多少个 元素出现 我要这个 len list counter elements 但更短 更有效的解决方案是将每个元素的计数
  • Android:每次需要启动和停止服务更好,还是让服务运行并绑定到它并取消绑定它更好?

    我正在开发一个应用程序 可以在来电期间检查多种条件 该应用程序的主要部分是一个广播接收器 用于侦听与手机状态相关的意图 以及一个检查条件的本地服务 目前 每次检测到来电时都会启动该服务 并在电话状态变回空闲时停止 现在我想知道这个程序是否正
  • 如何在 Java 中将 OpenLayers DrawFeature 与 Selenium WebDriver 一起使用(双击问题)?

    我正在测试一个基于 OpenLayers 的 GIS API 我使用 Selenium WebDriver 来执行测试 我现在正在尝试测试 OpenLayers DrawFeature 它在绘制点时效果很好 需要单击一下 但对于直线和多边形
  • Android 2.3不传递html5音频标签Get请求的cookie信息

    我正在尝试使用 android 2 3 中的 html5 音频标签从安全站点播放媒体文件 但我注意到在 Get 请求中 android 2 3 不会将 cookie 信息从浏览器传递到服务器 从而导致 HTTP 1 1 302 暂时移动 服
  • 从 numpy.uint8 数组中提取无符号字符

    我有代码从 python 序列中提取数值 并且在大多数情况下效果很好 但不适用于 numpy 数组 当我尝试提取无符号字符时 我执行以下操作 unsigned char val boost python extract
  • 在网页视图中使用深色模式

    我似乎无法让 android web 视图使用深色主题或使用 media prefers color scheme dark 我正在使用带有 DayNight 主题的 AndroidX 有没有人有一个在 api 29 之前向后兼容的解决方案
  • C 以二进制模式读/写文件

    我创建了一个包含 4000 个块的文件 块大小为 4096 字节 现在我想操作单个块并再次读取它们而不更改文件的大小 实际上我想将另一个文件中的块写入我创建的文件中的特定块 因此 我以二进制模式打开文件 如下所示 FILE storeFil
  • Windows 批处理文件中等效的 Switch 语句

    我想知道是否有一种简单的方法可以根据一个表达式的值在 Windows 批处理文件中分支执行 类似于 C C C Java JavaScript PHP 和其他实际编程语言中的 switch case 块 我唯一的解决方法是一个简单的 if
  • SDK/ADT 更新后 Android 库依赖关系被破坏

    今天 我将 Android SDK 和 Eciple ADT 更新到最新版本 ADT Rev 22 重新启动 Eclipse 后 每当我引用自定义库时 它都会对构建路径感到非常不满意 An example is shown in this
  • Javascript 映射二维数组

    我有这个数组 rows 89 18 9 1903 3 4 3 1 800 它应该看起来像这样 89 1903 3 18 3 1 9 4 800 正在运行的代码如下所示 rows 0 map columnIndex gt rows map r
  • Spring Elastic Search 自定义字段名称

    我是 Elastic Search 的新手 我正在尝试使用 Spring data elasticsearch 来实现它 我的弹性搜索文档中有一些名称为 Transportation Telephone Number 的字段 当我尝试将我的
  • 用于通配符 url 映射的 Kubernetes Ingress 控制器

    我需要我的每个用户都可以通过自定义网址访问服务 例如 abccompany mycloudapp com 每个服务都是 kubernetes 服务 我正在查看入口控制器 但我需要一种使用通配符主机字段并以某种方式将值读入 path 和 se
  • #someDiv 是什么意思? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 当用户将鼠
  • Google Datastore 模拟器从本地数据库中删除数据

    我的本地计算机 Mac OSX 10 11 6 上运行着一个本地数据存储模拟器实例 我已经有一堆数据了 但我想从本地数据库中删除所有数据 从头开始 不过 我已经尝试删除存储数据的目录 我认为的目录 启动模拟器时会出现此消息 WARNING
  • VS2015中sprintf()和wsprintf()的格式差异

    我正在将一些代码从多字节移动到 unicode 并发现我的字符串格式出现错误 看起来 Visual Studio 2015 在 sprintf 和 wsprintf 之间处理宽度参数说明符 的方式不同 这是编译器错误或副作用 还是我错过了一