「Windows API/文字表示の命令」の版間の差分
削除された内容 追加された内容
『Windows API』 2019年9月4日 (水) 21:48 から該当する章をそれぞれのサブページに移動。 |
編集の要約なし |
||
131 行
=== 変数の値を画面表示 ===
==== とにかく整数を表示したい場合 ====
ウィンドウ内に変数を文字描画できなければ、実用性がありません。
168 ⟶ 169行目:
* その他の方法▼
==== 小数を表示したい場合 ====
===== 例 =====
とりあえず、値 0.38 くらいの数値の1未満の大きさの入っている変数 hensuu の中身の数値を画面表示する方法を考えましょう。
まず、とりあえず100倍して、それを型変換の <code>(int)</code> 命令で、整数型として型変換したあとに、他の整数型の変数 bufseisuu に入れます。(バッファ用の整数でbufseisuu のつもり)
そのあと、上記の章と同様に sprintf すれば、小数点の上位2ケタの表示がされます。
<source lang=c>
// 正常に動作するコード例
int hensuu = 0.38 ;
static TCHAR henkan[50] ; // 文字列を格納するための変数 henkan を準備
int bufseisuu = (int) 100 * hensuu ; // ここで型変換している
_stprintf_s(henkan, 200, TEXT("%d"), bufseisuu);
TextOut(hdc, 450, 415, henkan, lstrlen(henkan));
</source>
===== 駄目なコード =====
C言語の文法上は問題が無くても、しかし次のコードは現実にはVisual Studio のコンパイラが正常動作せず、まちがった実行結果になります。
もし
:<code>_stprintf_s(henkan, 200, TEXT("%d"), (int) 100 * hensuu)</code> (ダメな例)
と _stprintf_s 内部で同時に宣言しても、異常な動作になります。
つまり、
<source lang=c>
// ダメなコード例
int hensuu = 0.38 ;
static TCHAR henkan[50] ; // 文字列を格納するための変数 henkan を準備
_stprintf_s(henkan, 200, TEXT("%d"), (int) 100 * hensuu ); // ここで異常に読み取りをする
TextOut(hdc, 450, 415, henkan, lstrlen(henkan));
</source>
このコードは駄目なのです。
正常動作すれば 0.38 くらいの数を100倍したものが入ってるハズなのに、実際には 2034859527 (一例)みたいな、なんかオカシな数が入ってしまいます。
文法上は、このような同時宣言もありそうですが、しかし実際にはウィンドウズVisual Studio のコンパイラ製作の都合などにより、このような同時宣言は異常動作になります。
_stprintf_s 関数にかぎらず、Visual Studio にもとから用意されている組み込み関数の中で、他の組み込み関数を使うと、異常動作をする場合が、しばしば、あります。
なので、あまり、使用する組み込み関数のなかには、ベツの組み込み関数を入れないようにしましょう。
数値を文字列に変換する方法には、_stprintf_s の他にもあります。
|