gpt4 book ai didi

visual-c++ - 使用 wcscat_s 连接两个 wchar_t* 时出现访问冲突错误

转载 作者:行者123 更新时间:2023-12-04 06:15:01 25 4
gpt4 key购买 nike

我正在尝试使用 wcscat_s 函数将一个 wchar[] 连接到一个 wchar_t*。我不断收到访问冲突错误。

这是代码

HANDLE hFindDll = FindFirstFile(dllDir,&findDllData);
wchar_t *path = L"C:\\Users\\andy\\Documents\\SampleProj\\";
rsize_t rsize = wcslen(path)+wcslen(findDllData.cFileName)+5;
wcscat_s(path,rsize,findDllData.cFileName);

我哪里出错了有什么建议吗?

P.S 如果我使用 wchar_t path[]而不是 wchar_t* path ,我在 Debug模式下收到损坏警告,但当我单击继续时,它会在不中断应用程序的情况下执行。在 Release模式下,根本不显示错误。

问候,
安迪

更新:这是整个代码:我想要实现的是从嵌入在 dll 中的资源播放波形文件......
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA findDllData;
HANDLE hFindDll;
LPCWSTR dllDir = L"C:\\Users\\andy\\Documents\\SampleProj\\*.dll";
HMODULE hICR;
HRSRC hRes;

hFindDll = FindFirstFile(dllDir,&findDllData);
if(hFindDll != INVALID_HANDLE_VALUE)
{
do
{
const wchar_t * path = L"C:\\Users\\andy\\Documents\\SampleProj\\";
rsize_t rsize = wcslen(path)+wcslen(findDllData.cFileName)+2;
wchar_t dst[1024];
wcscat_s(dst,1024,path); //--> this is where EXCEPTION occurs
wcscat_s(dst,1024,findDllData.cFileName);


hICR = LoadLibrary(dst);
hRes = FindResource(hICR, MAKEINTRESOURCE(200), _T("WAVE"));
if(hRes != NULL)
{
break;
}
}while(FindNextFile(hFindDll,&findDllData));
HGLOBAL hResLoad = LoadResource(hICR, hRes);
PlaySound(MAKEINTRESOURCE(200), hICR,SND_RESOURCE | SND_ASYNC);
}

return 0;
}

最佳答案

您的 path是一个指向常量、不可变、只读数组的指针。你不能cat进去吧,因为*cat()函数想要写入目标缓冲区,并在末尾附加数据。

相反,创建一个可变的接收者缓冲区:

const wchar_t * path = L"C:\\Users\\andy\\Documents\\SampleProj\\";

wchar_t dst[LARGE_NUMBER] = { 0 }; // ugh, very 1990

wcscat_s(dst, LARGE_NUMBER, path);
wcscat_s(dst, LARGE_NUMBER, findDllData.cFileName);

(更新:显然这个函数还有一个模板化的重载来识别静态数组: wcscat_s(dst, path); 。整洁。)

关于visual-c++ - 使用 wcscat_s 连接两个 wchar_t* 时出现访问冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7364127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com