Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中,数字的printf格式在mrsh中也不起作用_C - Fatal编程技术网

在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,我不知道。我想知道它是如何与本地运行的。