Cライブラリのctype.hに含まれる文字列操作関数
例 :isdigit(), toupper(), tolower()
stdlib.hに含まれる文字列変換関数
例:atoi(), atof()
および文字列I/O関数
例:sscanf(), sprintf()
においてランタイムの問題が発生した場合、通常はlocaleが正常に初期化されていないことに起因します。
典型的な問題がisdigit('1')を呼び出した場合に1ではなく、0を返すケースです。
Cライブラリの標準的な初期化コードを使用しない場合に、(例えば 自身の__main()関数を使用する場合)このような現象が発生します。 一番の解決策は、__rt_lib_init()でのCライブラリ初期化コードが正しく呼び出されるように保証することです。 これはlocaleの設定を行い、その他の初期化を必要とするCライブラリ関数を自動的にセットアップします。
代わりに以下の方法で、問題を解決することが可能かもしれません:
#include <locale.h> setlocale(LC_ALL,"C");
しかしながら、これは推奨される方法ではありません。特に、システムで必要とされない追加のlocaleの部分が読み込まれるからです。(潜在的に約1.4KBを費やします) この方法は、後々問題を招くかもしれない初期化されないままのCライブラリの他の部分を残す可能性があります。