数値と文字列について – プログラミング – Home

通知
すべてクリア

[解決済] 数値と文字列について


超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
Topic starter  

超初級の質問をさせて下さい。
次のようなコードを書きました。

int i;
i = 100;
MessageBox(hWnd,(LPCSTR)i,TITLE,MB_OK);

問題なくコンパイルされるのですが、エラー(マイクロソフトの、「エラーを報告しま
すか」ってやつ)が出てしまいます。
キャストが上手くいってないのでしょうか?原因が分かりません。
どなたか教えてください。


引用未解決
トピックタグ
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

むやみにキャストすればいいというものではありません。
キャストは必要最低限にするのが基本です。

数値をキャストしても文字列にはなりません。
例えば、sprintf等を使って変換してください。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

コンパイルが出来て、実行ファイルが作成されたからといって、
そのコードに誤りがない。というワケではありません。

なお、上記のコードだと…
アドレス0x00000064からメッセージボックスに表示する文字列がある。
という指定になってます。
通常はアクセス出来ない領域なので一般保護違反(最近はこう言わない?)で
エラーになってます。


返信引用
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
Topic starter  

char *str
int i;
i=100;
wsprintf(str,%d,i);
MessageBox(hWnd,str,TITLE,MB_OK);

以上のようにすれば解決できました。何でもかんでも、キャストすればいいわけではな
いんですね。勉強になりました。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

> char *str
> int i;
> i=100;
> wsprintf(str,%d,i);

上記のstrはどこを指しているのでしょうか?
このままでは初期化していませんので正しく動きませんが。


返信引用
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
Topic starter  

ポインタについて勉強すべきですね。
ポインタって別のメモリへの場所を示すために使う変数ですよ。

char *str; ←これは不定
このポインタはでたらめな場所を示しています。
たまたま実行できただけです。

char str[30];
あるいは、
char buffer[30];
char * str = buffer;
として使うんですよ。

この30は、wsprintf(str,%d,i);を実行するのに
十分なサイズなら別の値で構いません。

int i;
i=100;
wsprintf(str,%d,i);
MessageBox(hWnd,str,TITLE,MB_OK);


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

スレの流れが難しいな。8/3 08:46:50の超初心者さんは、
スレ主とは別の(他所でも良くお見かけする上級者の)超初心者さんですよね?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

C言語の勉強を先にした方が良さそうな感じですね。
入門書とか使って演習問題からやった方が良いと思います。
当ても無くプログラミングするよりも多分やりやすいです。
使うのはWindowsプログラミングの入門書ではなくて
純粋なC言語の入門書です。
多分、Windowsプログラミングの入門書は最低限C言語の知識は
ある事が前提になっていると思うので言語の勉強に向かないと思います。


返信引用
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
Topic starter  

はい確かに。
int i=100;
char *str;
wsprintf(str,%d,i);
は上手くいかないことがありますね。とりあえずある程度の、
メモリ領域を確保し解くべきでした。
int i=100;
char str[3];//3文字だから
wsprintf(str,%d,i);
とすべきでしたね。

皆さんご指摘有り難うございます。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

100を文字列化すると,4文字分必要です。
最後のナル文字を忘れていませんか?


返信引用
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
Topic starter  

ほんとだ。C++勉強しなくては。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました