- ベストアンサー
LPTSTR型の変数に文字を格納できない問題
- LPTSTR型の変数にキーボードから入力された文字を格納する方法についてわからない
- WindowsプログラミングでLPTSTR型の変数に文字を格納する方法が分からない
- TCHARやLPTSTRに関する理解不足が問題の原因
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>*buffer++=(TCHAR)wp;だと上手くいかず >buffer[iCount++]=(TCHAR)wp;だと上手くいきます。 >前者でも後者と同じ動きを期待していたのですが・・・ 他の質問の回答にも書き込みがありますがもう少し基本を勉強されないと いつまでたっても進展しないと思いますよ 環境良くわかりませんがデバッガの使い方なども勉強しましょう (デバッガの無い環境ならプログラム中でデータ表示するなどデバックの仕方を考えましょう) >*buffer++=(TCHAR)wp;だと上手くいかず こちらのコードではwp代入後、bufferの値自体が変化します >buffer[iCount++]=(TCHAR)wp;だと上手くいきます。 こちらのコードではwp代入後でもbufferの値は変更されません おかしいのはその後の表示でbufferポインタをそのまま使っているからでしょう (代入自体は同じ動作をしているはずです)
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
「うまくいかない」とだけ言われても他人には通じないので「何がどううまくいかないのか」をきちんと書いてください. もうちょっというと, 「現在どのようなコードなのか」を明らかにしたうえで ・どのような動作を期待しているのか ・実際にはどうなっているのか (エラーが出るならどのようなメッセージなのか, エラーは出ないけど期待した動作でないなら「どのように動作するのか」) を書いてください.
- koi1234
- ベストアンサー率53% (1866/3459)
>制限しない方法はありますでしょうか? PCのメモリ自体も有限です 無制限の入力受け付けるなんてことはありません 見た目上無制限に見せかけようとすることは可能ですが結局は ハード制限(メモリやDISK領域)を超えるような無制限データは扱えません それを理解したうえでそのように見せかけたいのであれば 一定量確保した領域を必要に応じて使いまわせば良いだけです そしてそのようにコーディングするのは貴方の腕にかかっています (それがプログラム) ある程度大きい領域を初めから取りたいのであれば new や mallocなどでメモリ必要分確保する方をお勧めします (開放を忘れないで下さい)
- koi1234
- ベストアンサー率53% (1866/3459)
LPTSTR はポインタです 例えが良いか判りませんがポインタというのは住所と同じです 実際にそこにデータを入れる為には入れ物(=家)に該当する入れ物が必要です 例 char buffer[100]; LPTSTR bufferaddr; 等として bufferaddr初期化で bufferaddr = buffer; 等とする必要があります 書かれてるソースではbufferの初期化がありませんし 実際のデータ格納領域もありません ある意味プログラムが飛ばないだけラッキー? (いずれにしても期待する動きはしていません)
お礼
早速のご回答ありがとうございました。 仰っていただいた通り初期化を行っていませんでした。 これだと最初にchar buffer[100]で 入力できる文字数を100と制限しますが、 制限しない方法はありますでしょうか?
お礼
ありがとうございました。 大変参考になりました。 質問が戻ってしまい申し訳ございませんが、 先ほどのコードでbufferを初期化したあとにやはり *buffer++=(TCHAR)wp;だと上手くいかず buffer[iCount++]=(TCHAR)wp;だと上手くいきます。 前者でも後者と同じ動きを期待していたのですが・・・