添加此代码后我的 C++ 应用程序无法运行

问题描述 投票:0回答:1

我将此代码添加到我的 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>
c++ windows winapi
1个回答
0
投票

建议使用

strcpy_s
而不是
strcpy
以确保您不会编辑未分配的内存。

复制字符串。这些版本的 strcpy、wcscpy、_mbscpy 具有安全增强功能,如 CRT 中的安全功能中所述。

对于另外两个警告,您应该始终检查返回值是否为 0,如果是则返回该函数。

来自 GlobalAlloc 和 GlobalLock 文档:

如果函数失败,返回值为NULL。

并且可以随意 Google 或访问 Microsoft 文档网站 搜索该函数并阅读相关内容(即备注、返回值和参数)。

© www.soinside.com 2019 - 2024. All rights reserved.