超初級の質問をさせて下さい。
次のようなコードを書きました。
int i;
i = 100;
MessageBox(hWnd,(LPCSTR)i,TITLE,MB_OK);
問題なくコンパイルされるのですが、エラー(マイクロソフトの、「エラーを報告しま
すか」ってやつ)が出てしまいます。
キャストが上手くいってないのでしょうか?原因が分かりません。
どなたか教えてください。
むやみにキャストすればいいというものではありません。
キャストは必要最低限にするのが基本です。
数値をキャストしても文字列にはなりません。
例えば、sprintf等を使って変換してください。
コンパイルが出来て、実行ファイルが作成されたからといって、
そのコードに誤りがない。というワケではありません。
なお、上記のコードだと…
アドレス0x00000064からメッセージボックスに表示する文字列がある。
という指定になってます。
通常はアクセス出来ない領域なので一般保護違反(最近はこう言わない?)で
エラーになってます。
char *str
int i;
i=100;
wsprintf(str,%d,i);
MessageBox(hWnd,str,TITLE,MB_OK);
以上のようにすれば解決できました。何でもかんでも、キャストすればいいわけではな
いんですね。勉強になりました。
> char *str
> int i;
> i=100;
> wsprintf(str,%d,i);
上記のstrはどこを指しているのでしょうか?
このままでは初期化していませんので正しく動きませんが。
ポインタについて勉強すべきですね。
ポインタって別のメモリへの場所を示すために使う変数ですよ。
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);
スレの流れが難しいな。8/3 08:46:50の超初心者さんは、
スレ主とは別の(他所でも良くお見かけする上級者の)超初心者さんですよね?
C言語の勉強を先にした方が良さそうな感じですね。
入門書とか使って演習問題からやった方が良いと思います。
当ても無くプログラミングするよりも多分やりやすいです。
使うのはWindowsプログラミングの入門書ではなくて
純粋なC言語の入門書です。
多分、Windowsプログラミングの入門書は最低限C言語の知識は
ある事が前提になっていると思うので言語の勉強に向かないと思います。
はい確かに。
int i=100;
char *str;
wsprintf(str,%d,i);
は上手くいかないことがありますね。とりあえずある程度の、
メモリ領域を確保し解くべきでした。
int i=100;
char str[3];//3文字だから
wsprintf(str,%d,i);
とすべきでしたね。
皆さんご指摘有り難うございます。
100を文字列化すると,4文字分必要です。
最後のナル文字を忘れていませんか?
ほんとだ。C++勉強しなくては。