2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

最近のトラックバック

無料ブログはココログ

« JScriptに苦戦 | トップページ | ダイヤグラムビューに、[停車駅明示]機能を試作 »

2008年12月31日 (水)

VC++2008で _mbclen() 関数が誤動作

Visual Studio 2008 の VisualC++ で、画面に表示した文字列が文字化けするという問題に出くわしました。

原因を調べてみたところ、_mbclen() という関数が誤動作していることが分かりました。

_mbclen() 関数は、文字が1バイト文字か2バイト文字かを判定する関数です。
補足しますと、『1バイト文字』とは、1バイトで表すことのできる文字です。半角英数字・半角カタカナがこれに含まれます。これに対して、2バイト文字とは、1文字を表すのに2バイトを必要とする文字のことです。漢字はすべて2バイトに含まれます。

この_mbclen()関数が、"武"という文字を1バイト文字と判定していました。これが原因で、プログラムが文字の境界を誤判定して、文字が化けていました。

さらにいろいろ試してみると、どうもプロジェクトのプロパティで

 プログラム全体の最適化:リンク時のコード生成を有効にする

という項目を選択していると、誤動作することが分かりました。

「最適化を有効にするとプログラムが誤動作する」というのはおそらく、プログラムの側に問題があると思われますが、今のところ原因がはっきりしません。僕ももう少し調べてみるつもりですが、どなたか、同じような経験をなさった方はいらっしゃいませんか?

« JScriptに苦戦 | トップページ | ダイヤグラムビューに、[停車駅明示]機能を試作 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/186995/43581229

この記事へのトラックバック一覧です: VC++2008で _mbclen() 関数が誤動作:

« JScriptに苦戦 | トップページ | ダイヤグラムビューに、[停車駅明示]機能を試作 »