C言語なら俺に聞け 163at TECH
C言語なら俺に聞け 163 - 暇つぶし2ch489:デフォルトの名無しさん
24/12/17 00:02:56.65 KLd2kDAJ0.net
>>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を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch