大家好,我目前正在我的第二个视觉工作室制作项目:)。我是德尔福编码器,请原谅我的无知。
我想编写一个简单的例程来列出一些文件,我想写一个像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"\\");
我做错了什么我需要为新创建的缓冲区分配内存还是什么?
答案 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]));
现在,当缓冲区太小时,调试器会介入。它是。