【发布时间】:2014-12-19 09:03:15
【问题描述】:
我正在使用两个函数 sprintf 和 snprintf 来处理“double”到字符串的转换, 在其中一种情况下,正在运行的应用程序的语言环境与 Windows 的语言环境不同。因此,在这种情况下,sprintf 考虑的语言环境始终属于应用程序。然而, snprintf 有时会使用 Windows 语言环境启动。因此,这两种方法返回的十进制字符不同,这会导致问题。
要提供更多详细信息, 我的项目中有一个库,它从“double”构建一个字符串,这个库使用 snprintf 将一个 double 转换为字符串。然后我需要将此信息发送到可以理解“。”的服务器。 (点)仅作为十进制符号。因此,我需要用“。”替换本地十进制字符。 (点)。为了找出本地十进制字符(以替换它),我正在使用我的项目中提供的使用 sprintf 的库之一。然后我用一个点替换这个字符以获得最终输出。
另外,请注意,sprintf 总是考虑本地应用程序的语言环境,而 snprintf 有时会考虑 Windows 的语言环境。 由于问题不一致,抱歉没有提供清晰的示例。
那么,在什么情况下 snprintf 的行为可能会有所不同? 为什么我从这两种方法中得到如此不同的行为? 如何避免?
附: - 我必须使用这两种方法,所以请提出一个不需要我使用任何不同方法的解决方案。
谢谢。
【问题讨论】:
-
sprintf和snprintf很可能使用相同的代码进行实际格式化,因此它们的行为不应彼此不同。您能否提供一个Minimal, Complete, and Verifiable Example 来说明您的问题? -
对不起,由于问题不一致,我无法为您提供可验证的示例。但我可以简要解释一下我在代码中到底在做什么。我已经编辑了我的帖子。谢谢。
-
@Prasad:重点是不要有三个示例,一个 Minimal,一个 Complete,最后一个 Verifiable。
标签: c++ localization printf