バッファに\0は必要か – プログラミング – Home

通知
すべてクリア

バッファに\0は必要か


Kntan
 Kntan
(@Kntan)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

エディットボックスから文字を取り込みます。
エディットボックスの文字は2文字です。
GetWindowText(hText, str, 2);

GetWindowText(hText, str, 3);
とどっちにするべきですか?


引用解決済
トピックタグ
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

TCHAR str[3]
GetWindowText(hText, str, 3);
とすればエディットボックスの内容がどんなに長くても、
ヌル文字を含めて3文字分だけstrにコピーされます。

↓MSDN の GetWindowText の説明にちゃんと書いてありますよ。以下引用です。
nMaxCount
lpString パラメータがポイントするバッファの長さを指定します (終端の NULL 文字
を含む) 。
テキストがバッファに入り切らないときは、切り捨てられます。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

>GetWindowText(hText, str, 3);

エディットボックスの3バイト目にaあのように全角の2バイト目があると
str[0] = 0x61 ('a')
str[1] = 0x82 (あの1バイト目)
str[2] = 0x00 ('\0')
というように尻切れになって、あの2バイト目(0xa0)が入りません。

>エディットボックスの文字は2文字です。
ということは全角を考慮して5バイトに...。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

念のため補足しておきます。
前の私の書き込みで3文字というのは TCHAR 3つ分ということです。

# あえてバイトと書かなかったのは TCHAR が WCHAR の場合を考えてです。


返信引用
Kntan
 Kntan
(@Kntan)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

全角のことまで考えて下さってありがとうございます。
\0のことが知りたかったんだけど、\0の分も含めてのバイト数を
GetWindowTextの引数にしないといけなかったんですね。

strは数字だから、
GetWindowText(hText, str, 3);
にしました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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