[過去ログ] C言語なら俺に聞け 163 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
472
(2): (ワッチョイ 3369-iztn) 2024/12/16(月)22:06 ID:o/MtQx1A0(4/4) AAS
Unicodeになるとなんで割る必要が出てくるのかいまいち掴めないなあ
BuffのサイズをTCHARのサイズで割ってどうしてサイズが出せるの?
473: (ワッチョイ 666d-1w4P) 2024/12/16(月)22:41 ID:/03Ox5VG0(2/2) AAS
>>472
ごちゃごちゃ考えてないで
とっととデバッガ使って値を確認しな
476
(1): 2024/12/17(火)00:02 ID:KLd2kDAJ0(1/2) AAS
>>472
Unicodeの場合、2バイトで1文字を表現
?????????????????? で9文字、18バイト

ANSIの場合、
????????? で9文字、9バイト

> sizeof(buf)/sizeof(TCHAR)

sizeof(buf)が指すのはバイト数、Unicodeなら18、ANSIなら9
sizeof(TCHAR)が指すのは1文字のバイト数、Unicodeなら2、ANSIなら1

そして stprintf_s の引数 sizeOfBufferはバイト数ではなく「格納する最大文字数」であること

引数がバイト数ならsizeof(buf)でいいけど、引数が文字数を求めているならsizeof(buf)ではおかしくなる
上の例で言えば、Unicodeは18バイト9文字で本来は9とするところを18と指定してしまうことになる
すると関数側はバッファが18文字分(バイトで32バイト)あると勘違いするわけでバッファオーバーフローを起こす

sizeof(buf)/sizeof(TCHAR) は18バイトの領域があって、それを1文字のバイト数で割って「9文字」ということ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.033s