バッファに\0は必要か

[戻る]
Kntan 2002/01/23(水) 05:39:19
エディットボックスから文字を取り込みます。
エディットボックスの文字は2文字です。
GetWindowText(hText, str, 2);
と
GetWindowText(hText, str, 3);
とどっちにするべきですか?

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

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

NGA 2002/01/23(水) 09:41:34
>GetWindowText(hText, str, 3);

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

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

kazuma 2002/01/23(水) 10:15:39
念のため補足しておきます。
前の私の書き込みで3文字というのは TCHAR 3つ分ということです。

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

Kntan 2002/01/23(水) 11:22:05
全角のことまで考えて下さってありがとうございます。
\0のことが知りたかったんだけど、\0の分も含めてのバイト数を
GetWindowTextの引数にしないといけなかったんですね。

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

古いスレッドには追加発言できません。