プロが教えるわが家の防犯対策術!

LPTSTR型の変数に文字を格納
現在C言語でWindowsプログラミングを学習しています。
LPTSTR 型の変数にキーボードから入力されて1文字づつ格納したいのですが、
下記のコードであればうまくいきません。
自分がTCHARやLPTSTRのことを根本から理解できていないのが原因だと思うのですが。

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp)
{
static LPTSTR buffer;
HDC hdc;
PAINTSTRUCT ps;

switch(msg){
case WM_CHRAR:
*buffer++=(TCHAR)wp;
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_PRINT:
hdc=BeginPaint(hWnd,&ps);
DrawText(hdc,buffer,-1,&rc,DT_WORDBREAK);
EndPaint(hWnd,&ps);
return 0;



A 回答 (4件)

>*buffer++=(TCHAR)wp;だと上手くいかず


>buffer[iCount++]=(TCHAR)wp;だと上手くいきます。
>前者でも後者と同じ動きを期待していたのですが・・・

他の質問の回答にも書き込みがありますがもう少し基本を勉強されないと
いつまでたっても進展しないと思いますよ
環境良くわかりませんがデバッガの使い方なども勉強しましょう
(デバッガの無い環境ならプログラム中でデータ表示するなどデバックの仕方を考えましょう)

>*buffer++=(TCHAR)wp;だと上手くいかず
こちらのコードではwp代入後、bufferの値自体が変化します
>buffer[iCount++]=(TCHAR)wp;だと上手くいきます。
こちらのコードではwp代入後でもbufferの値は変更されません

おかしいのはその後の表示でbufferポインタをそのまま使っているからでしょう
(代入自体は同じ動作をしているはずです)
    • good
    • 0

「うまくいかない」とだけ言われても他人には通じないので「何がどううまくいかないのか」をきちんと書いてください. もうちょっというと, 「現在どのようなコードなのか」を明らかにしたうえで


・どのような動作を期待しているのか
・実際にはどうなっているのか (エラーが出るならどのようなメッセージなのか, エラーは出ないけど期待した動作でないなら「どのように動作するのか」)
を書いてください.
    • good
    • 0

>制限しない方法はありますでしょうか?


PCのメモリ自体も有限です
無制限の入力受け付けるなんてことはありません

見た目上無制限に見せかけようとすることは可能ですが結局は
ハード制限(メモリやDISK領域)を超えるような無制限データは扱えません

それを理解したうえでそのように見せかけたいのであれば
一定量確保した領域を必要に応じて使いまわせば良いだけです
そしてそのようにコーディングするのは貴方の腕にかかっています
(それがプログラム)

ある程度大きい領域を初めから取りたいのであれば
new や mallocなどでメモリ必要分確保する方をお勧めします
(開放を忘れないで下さい)
    • good
    • 0
この回答へのお礼

ありがとうございました。
大変参考になりました。

質問が戻ってしまい申し訳ございませんが、

先ほどのコードでbufferを初期化したあとにやはり
*buffer++=(TCHAR)wp;だと上手くいかず
buffer[iCount++]=(TCHAR)wp;だと上手くいきます。

前者でも後者と同じ動きを期待していたのですが・・・

お礼日時:2010/06/06 15:35

LPTSTR はポインタです


例えが良いか判りませんがポインタというのは住所と同じです
実際にそこにデータを入れる為には入れ物(=家)に該当する入れ物が必要です


char buffer[100];
LPTSTR bufferaddr;
等として
bufferaddr初期化で
bufferaddr = buffer;
等とする必要があります

書かれてるソースではbufferの初期化がありませんし
実際のデータ格納領域もありません

ある意味プログラムが飛ばないだけラッキー?
(いずれにしても期待する動きはしていません)
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
仰っていただいた通り初期化を行っていませんでした。
これだと最初にchar buffer[100]で
入力できる文字数を100と制限しますが、
制限しない方法はありますでしょうか?

お礼日時:2010/06/06 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!