0

Outlookメールボックス(パスに255文字の最大長がない)から大規模なフォルダーパスを取得しようとすると、正しく処理されていないようですが、コードですべてを試しましたが、問題に光を当てるものは何もないようです。

Path:        \\Mailbox - long\Inbox\fgsegesgrgesrgegthtrhrthyerytyertytthgfhgdfhdfh\sfhsjkdfhsjkhfweuifhskjefhjksdhjsdhfusehfklahdfajkehwfuasdf\sadfhjaehjfhaeufhuaseh9oa3heufhshudhjksahdfjkshadmldhasnf\awefuyawefioaw3yfiuapgpapwqq0uwqfeiusdfsgpsadncabpaw\iawehfiowaeghuiaegfwuioaghpaweufrhasdfhlkasvjdhlaehfuawieghgawgwaef\fasbclajsbvbwaubhvwabveuabvdjklzbdvjkhzusefhzlhsdf\vshiuwhpqphdfhvjsamhashmasdfvhnakjdsfiawjeijfvsadkjfsa\aefrghjksadfhjklshareuhsadhsahvsandvnlsdffalsdfh384fhsduafhl\fasfdlashjklefrhuaehfskhaahsdfhuhaiyeifoa38fodasfhsahdfklkkasdf\jkfhsakdfjhsjkladfhdsjkahfjkajkflashdfjkshafjksahfsdjafhsdjahfjsahldfkasf\fauiwehfeawhfjkhsakjfhsjkaefheuifhjksdhjkafhjksadhfjhaseuhfasjhdjkfhasfjhaskjdfhslaf\jklshadjkfhasjkhfjkaheuyhruiyq3y83yuryvnzxcvxzcviouxzcvzxvklzxvkl
Path Length: 766 to 812 char

うまくいけば、それをもう少しよく説明します、コード。

if(....)
{
    size_t n = wcslen(outlookFolderPath->Value.lpszW);
    if(n < 100)
        wcscpy_s(m_szInheritedFolderPath, outlookFolderPath->Value.lpszW);
    else
    {
        WCHAR szTemp[2048] = {}, szText[2048]= {};
        LoadStringW(ghInstDLL, IDS_PATH_TRUNCATED, szText, 2048);
        swprintf_s(szTemp, szText, outlookFolderPath->Value.lpszW + ((n-80) * sizeof(WCHAR)));
        wcscpy_s(m_szInheritedFolderPath, szTemp);     // *** Dies Here ***
    }
} 
...

string.hラインで致命的なエラーが発生します。

__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, wcscpy_s, wchar_t, _Dest, _In_z_ const wchar_t *, _Source)
4

2 に答える 2

3
(n-80) * sizeof(WCHAR). 

これは、100 文字の長さの配列に 160 文字をコピーします。カブーム。

バイト数ではなく、文字数をカウントします。を削除し* sizeof(WCHAR)ます。そして、サロゲートをチェックする必要があります。

于 2011-11-07T11:17:19.180 に答える
1
swprintf_s(szTemp, szText, outlookFolderPath->Value.lpszW + ((n-80) * sizeof(WCHAR)));

ここで、2 番目の引数はバッファーのサイズであると想定されています。

于 2011-11-07T10:56:22.820 に答える