Praveen Kumar Katiyar Ответов: 1

Как изменить строку Юникода.


У меня есть функция

void ModifyString2 (WCHAR *szString)
{
    // Declare a sample wide character string.
    int nLen = wcslen (szString);
    wcscat_s(szString, MAX_STRING_SIZE, L"-Modified" );
}


Я вызываю эту функцию из основной функции.

void main ()
{
    WCHAR szString [MAX_NAME_LENGTH] ;
    wcscpy_s(szString, MAX_NAME_LENGTH, L"This is Some String");
    printf ("Before Call String  Value=[%s]", szString);

    ModifyString2(szString);

    printf ("Before Call String  Value=[%s]", szString);
}


Когда я отлаживаю эту программу и выхожу из main, я получаю ошибку

Run-Time Check Failure #2 - Stack around the variable 'szString' was corrupted.


что я делаю не так ?

Что я уже пробовал:

вместо того чтобы выделять szString в стеке, я попробовал его с кучей,

любить
void main ()
{
    WCHAR * szString = new WCHAR [MAX_NAME_LENGTH] ;
    wcscpy_s(szString, MAX_NAME_LENGTH, L"This is Some String");
    printf ("Before Call String  Value=[%s]", szString);

    ModifyString2(szString);
    
    printf ("Before Call String  Value=[%s]", szString);
    delete szString;
    return 0;

}


This may be due to a corruption of the heap, which indicates a bug in MFCClient.exe or any of the DLLs it has loaded.


Не уверен, что я делаю неправильно, я использую Visual Studio 2010 ultimate на коробке windows.

пожалуйста помочь.


-Правин.

1 Ответов

Рейтинг:
1

Richard MacCutchan

Скорее всего потому, что ценности MAX_NAME_LENGTH и MAX_STRING_SIZE различаться. Вы должны передать длину буфера в ModifyString2 функция, поэтому она использует точно такую же длину, как и исходный буфер. Что-то вроде:

void ModifyString2 (WCHAR *szString, int nlen)
{
    wcscat_s(szString, nlen, L"-Modified" );
}


[редактировать]
И измените вызов на:
ModifyString2(szString, MAX_NAME_LENGTH);

[/редактировать]