在c中,数字的printf格式在mrsh中也不起作用
使用中的在c中,数字的printf格式在mrsh中也不起作用,c,C,使用中的printf格式处理可以正常工作的数字: printf ("\r\n <%s>\t AmountOfMalloc %'.ld", HostName ,GetMalloc ()) ; 在脚本中通过mrsh调用同一个应用程序远程将不会导致如下数字格式: AmountOfMalloc 17220149424 LC_ALL=en_US.UTF-8 /path/to/program 环境是Windows 10 ltsc 2019上VMware Workstat
printf
格式处理可以正常工作的数字:
printf ("\r\n <%s>\t AmountOfMalloc %'.ld", HostName ,GetMalloc ()) ;
在脚本中通过mrsh调用同一个应用程序远程将不会导致如下数字格式:
AmountOfMalloc 17220149424
LC_ALL=en_US.UTF-8 /path/to/program
环境是Windows 10 ltsc 2019上VMware Workstation 15.5.7中的Suse Linux Enterprise Server 15 sp2,4核,6GB ram
是否有人解释过此问题以及可能的解决方案?此差异是由不同的环境
区域设置
设置造成的
通过运行locale
命令,可以查看程序以所需方式运行时应用的设置。它将输出多行,例如货币和数字格式设置,但通常它们都具有相同的值,例如“en_US.UTF-8”
将该设置应用于远程运行命令的最简单方法是在行前面加前缀,如下所示:
AmountOfMalloc 17220149424
LC_ALL=en_US.UTF-8 /path/to/program
从您提供的示例来看,您想要的区域设置可能与en_US.UTF-8不同,因此请使用从
locale
中获得的值。非常感谢,区域设置是个问题。看不出有什么原因,
在printf工作正常之前,将以下内容添加到c源代码:
setlocale ( LC_NUMERIC, "de_DE.UTF-8" ) ;
setlocale ( LC_ALL, "de_DE.UTF-8" ) ;
谢谢。请包括本地运行和通过mrsh运行的
locale
命令的输出。看起来不同的locale设置locale是相同的。LANG=de_de.UTF-8 LC_de.UTF-8“LC_NUMERIC=“de.UTF-8”LC_TIME=“de_de.UTF-8”LC_COLLATE=“de.UTF-8”LC_MONETARY=“de.UTF-8”LC_MESSAGES=“de.UTF-8”LC_PAPER=“de.UTF-8”LC_NAME=“de_de.UTF-8”LC_ADDRESS=“de_de.UTF-8”LC_TELEPHONE=“de_de.UTF-8”LC_MEASUREMENT=“de_de.UTF-8”LC_IDENTIFICATION=“de.UTF-8”LC_ALL=,设置LC_ALL将不适用于区域设置。请注意,C程序默认以C区域设置开始。要使用环境语言环境,您必须将setlocale(LC_ALL,“”)
添加到您的程序中。@KamilCuk-Huh,我不知道。我想知道它是如何与本地运行的。