wcscat_s问题

时间:2011-08-19 14:35:37

标签: visual-studio-2010

大家好,我目前正在我的第二个视觉工作室制作项目:)。我是德尔福编码器,请原谅我的无知。

我想编写一个简单的例程来列出一些文件,我想写一个像Delphi的简单函数

  

IncludeTrailingPathDelimiter()

这是一个简单的函数,如果不存在,则将\添加到文件路径...

所以我想出了这个

void listfiles(wchar_t * root)
{

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

    printf("%S",root);

}

它有效但在退出该功能后,我在这条线上得到了一个(Stack Corruption)

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

我做错了什么我需要为新创建的缓冲区分配内存还是什么?

1 个答案:

答案 0 :(得分:2)

使用安全字符串函数很好,但您需要正确使用它们。 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]));

现在,当缓冲区太小时,调试器会介入。它是。