我将此代码添加到我的 C++ 应用程序中,但我无法再运行应用程序
void setclipbord(const char* szBuffer)
{
OpenClipboard(NULL);
HGLOBAL hClipboardData = GlobalAlloc(GMEM_MOVEABLE, strlen(szBuffer) + 1);
char* pchData = (char*)GlobalLock(hClipboardData);
strcpy(pchData, szBuffer);
GlobalUnlock(hClipboardData);
EmptyClipboard();
SetClipboardData(CF_TEXT, hClipboardData);
CloseClipboard();
}
我使用最新版本 Visual Studio 2022 Visual Studio 发现 1 个错误和 2 个警告
警告“hClipboardData”可能为“0”,并且是“GlobalAlloc()`169”中找到的值的副本:这不符合函数“GlobalLock”的规范。
警告“pchData”可能为“0”:这不符合函数“strcpy”的规范。
错误“strcpy”:此函数或变量可能不安全。考虑使用 strcpy_s 代替。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。
我使用这些库
#include <iostream>
#include <string>
#include <windows.h>
#include <winuser.h>
#include <cstring>
#include <time.h>
建议使用
strcpy_s
而不是strcpy
以确保您不会编辑未分配的内存。
复制字符串。这些版本的 strcpy、wcscpy、_mbscpy 具有安全增强功能,如 CRT 中的安全功能中所述。
对于另外两个警告,您应该始终检查返回值是否为 0,如果是则返回该函数。
来自 GlobalAlloc 和 GlobalLock 文档:
如果函数失败,返回值为NULL。
并且可以随意 Google 或访问 Microsoft 文档网站 搜索该函数并阅读相关内容(即备注、返回值和参数)。