「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 の他にもあります。