1

私のプログラムが 1 台のマシンで正しく動作していなかったので、バグを探し始めたところ、そのマシンで snprintf が . ではなくコンマ (,) を使用していることを発見しました。(ドット) 他のコンピューターの 99% (少なくとも私の経験では)。

これは標準化されるべきではないのですか?

基数が . (ドット) であるため、コンマでは正しく機能しません。

私の質問は、ドットを基数文字として強制する簡単な方法はありますか? コンマを手動で検索してドットに置き換えることができることはわかっていますが、確かにもっとクリーンな方法があります。

4

3 に答える 3

6

setlocale-function を使用してロケール設定を変更し、snprintf にドットを使用させることができるはずです。「POSIX」または「C」に設定してみてください。(setlocale(LC_ALL, "POSIX")

于 2010-08-11T12:09:39.207 に答える
5

.vsは、ロケール,の一部によって設定されます。 したがって、 ( など)LC_NUMERICを使用するロケールを使用するようにプログラムを設定してください。."POSIX"

于 2010-08-11T12:04:17.517 に答える
1

ライブラリコードの場合、の代わりにPOSIX2008uselocale関数を使用することをお勧めしますsetlocale。スレッド固有のロケールを設定できるため、ライブラリコードがスレッドを使用するプログラムから呼び出された場合でも、他のスレッドの動作を台無しにすることはありません(および/またはスレッドではないため、プログラムをクラッシュさせることsetlocaleはありません-安全な)。

LC_NUMERICアプリケーションコードの場合、ロケールカテゴリをC/POSIX以外に設定することは避けてください。ほとんどのアプリケーションで実際に設定する必要があるカテゴリは、、、LC_CTYPEおよびLC_MESSAGES場合によっては。だけLC_COLLATEです。

于 2010-08-11T12:47:48.787 に答える