プロが教える店舗&オフィスのセキュリティ対策術

#define len (1024)
void window(std::string text) {
const char src[] = {*text.c_str()};
TCHAR dst[2048];
ZeroMemory(&dst[0],len);
MultiByteToWideChar(CP_ACP, 0, &src[0], sizeof(src), ((LPWSTR)&dst[0]), len);
auto window = LoadGraph("pic\\window.png");
DrawRotaGraph(310, 430, 1.5,0,window, FALSE);
DrawString(400, 400,dst, GetColor(255,255,255));
}
MultiByteToWideChar(CP_ACP, 0, &src[0], sizeof(src), ((LPWSTR)&dst[0]), len);
でバッファオーバーフローが発生しlen()の方を1024から2056に変更したりしましたが
結果が変わらずオーバーフローしますどうすればいいでしょうか、、

質問者からの補足コメント

  • うーん・・・

    数字をミスりました2056ではなく2048です。
    一度ZeroMemoryの方をmemsetに変更して同じ処理をさせましたが
    MultiByteToWideChar(CP_ACP, 0, &src[0], sizeof(src), ((LPWSTR)&dst[0]), len);
    の方でエラーが起きます。

      補足日時:2021/06/20 10:48
  • 調べたところ

    const char *src = {text.c_str()};
    TCHAR buf[len];
    MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, src, strlen(src), (LPWSTR)buf, (sizeof buf) / 2);
    strcpy_s(buf, src);


    auto window = LoadGraph("pic\\window.png");
    DrawRotaGraph(310, 430, 1.5,0,window, FALSE);
    DrawString(0, 0,buf, GetColor(255,255,255));
    で何とか成功いたしましたありがとうございました!

      補足日時:2021/06/20 17:41

A 回答 (2件)

>数字をミスりました2056ではなく2048です。


No1の回答の意図は、数値についてのアドバイスではなく、
 TCHAR dst[ken];
ではなく、
 TCHAR dst[2048];
で固定長の領域を確保している事をご指摘したつもりですが・・・
    • good
    • 0
この回答へのお礼

では可変長型にした方よいということですか?
試してみます!

お礼日時:2021/06/20 17:23

>len()の方を1024から2056に変更したりしましたが



TCHAR dst[2048];

のままでは、その変更は有効にならないので

ZeroMemory(&dst[0],len);

したら、メモリリークになるのでは?
    • good
    • 0
この回答へのお礼

数字の方をミスりました、、訂正します2048です、、
しかしエラーの方には
MultiByteToWideChar(CP_ACP, 0, &src[0], sizeof(src), ((LPWSTR)&dst[0]), len);
の方でバッファオーバーフローになるのでこっちの方が問題ですね、、、、
ちなみにZeroMemoryの方は一度cのmemsetで試しましたが問題ありませんでした。

お礼日時:2021/06/20 10:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A