我使用了两个函数sprintf和snprintf来处理“double”到字符串的转换, 在其中一种情况下,运行的应用程序的语言环境与Windows的语言环境不同。因此,在这种情况下,sprintf认为的语言环境始终是应用程序。而snprintf有时会开始使用Windows语言环境。因此,这两种方法返回的十进制字符是不同的,并且会导致问题。C++:sprintf认为哪种语言环境?
提供更多详细信息, 我在我的项目中有一个库,它从“double”构建一个字符串,该库使用snprintf将double转换为字符串。然后我需要将这些信息发送给服务器,这会理解“。” (点)仅作为小数点符号。因此,我需要用“。”替换本地小数字符。 (点)。要找出本地小数字符(为了替换它),我正在使用我的项目中提供的其中一个使用sprintf的库。然后我用点替换这个角色以获得最终输出。
此外,请注意,sprintf始终考虑本地应用程序的区域设置,而snprintf有时会考虑Windows的区域设置。 由于问题不一致,抱歉没有提供明确的示例。
那么,什么情况下snprintf可能会有不同的行为? 为什么我会从这两种方法中获得不同的行为? 我该如何避免它?
P.S. - 我必须使用这两种方法,所以请建议一个解决方案,不要求我使用任何不同的方法。
谢谢。
'sprintf'和'snprintf'最有可能使用相同的代码来进行实际的格式设置,所以它们不应该有相互不同的行为。你能否提供一个[最小,完整和可验证的例子](http://stackoverflow.com/help/mcve)来显示你的问题? – 2014-12-19 09:09:50
对不起,由于问题不一致,我无法为您提供可验证的示例。但我可以简单地解释一下,我在我的代码中究竟做了什么。我已经编辑过我的帖子。谢谢。 – Prasad 2014-12-19 09:47:51
@Prasad:重点不在于有三个例子,一个最小,一个完成,最后一个可验证。 – MSalters 2014-12-19 11:27:12