проблема wcscat_s - PullRequest
       3

проблема wcscat_s

0 голосов
/ 19 августа 2011

Привет, люди, с которыми я сейчас работаю во втором проекте, созданном для Visual Studio :). Я кодер Delphi, так что прошу прощения за мое невежество.

Я хочу написать простую процедуру для перечисления некоторых файлов, и я хотел написать простую функцию, такую ​​как Delphi's

IncludeTrailingPathDelimiter ()

Это простая функция, которая добавляет \ к пути к файлу, если его там нет ...

Итак, я придумал это

void listfiles(wchar_t * root)
{

    if (root[wcslen(root) - 1] != L'\\') 
        wcscat_s(root,wcslen(root)+2,L"\\");

    printf("%S",root);

}

Это работает, но после выхода из функции я получаю (повреждение стека) по этой строке

wcscat_s(root,wcslen(root)+2,L"\\"); 

Что я делаю неправильно, мне нужно выделить память для нового созданного буфера или что?

1 Ответ

2 голосов
/ 19 августа 2011

Использование безопасных строковых функций - это нормально, но вам нужно правильно их использовать. Второй аргумент wcscat_s () - это размер буфера. Вы не знаете размер буфера в этом коде, он наверняка не wcslen (root) +2. Перепишите функцию следующим образом:

void listfiles(wchar_t * root, size_t rootSize)
{
    if (root[wcslen(root) - 1] != L'\\') 
        wcscat_s(root, rootSize, L"\\");

    printf("%S",root);
}

...
wchar_t buffer[666];
...
listfile(buffer, sizeof(buffer) / sizeof(buffer[0]));

А теперь включится отладчик, когда ваш буфер слишком мал. Это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...