C++ Regex&;无效的空指针表达式

C++ Regex&;无效的空指针表达式,c++,regex,filter,crash,expression,C++,Regex,Filter,Crash,Expression,我从谷歌上找到了这个网站,我想这里的人们会帮助解决编码问题 我正在为一个应用程序创建一个坏词过滤器,但我遇到了问题。 目前,我正在从应用程序入口点创建一个线程,线程流如下所示: while(true) { if (!OpenClipboard(NULL)) ExitProcess(0); //TODO: Try opening clipboard again. h = GetClipboardData(CF_TEXT); //h is HANDLE.

我从谷歌上找到了这个网站,我想这里的人们会帮助解决编码问题

我正在为一个应用程序创建一个坏词过滤器,但我遇到了问题。 目前,我正在从应用程序入口点创建一个线程,线程流如下所示:

while(true)
{

    if (!OpenClipboard(NULL))
        ExitProcess(0); //TODO: Try opening clipboard again.

    h = GetClipboardData(CF_TEXT); //h is HANDLE.

    std::string CB_Data = (char*)h;

    if(CB_Data.size() != NULL) //An attempt to check if it's not empty
    {
        if ( std::regex_search(CB_Data.c_str(), BADWORD_FILTER))
        {
            try
            {
                EmptyClipboard();
                SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern."
            }
            catch(...)
            {
                //TODO: Error logging
            }
        }

        else if ( std::regex_search(CB_Data.c_str(), BADWORD_FILTER2))
        {
            try
            {
                EmptyClipboard();
                SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern."
            }
            catch(...)
            {
                //TODO: Error logging
            }
            EmptyClipboard();
            SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern."
        }
    }

    CloseClipboard();
    Sleep(1000); //Check every 1 second for the forbidden words.
}
因此,该应用程序监视剪贴板中的禁止字。然而,大多数时候我都会遇到“Expression:Invalid null pointed”错误,我对VisualStudio调试器并不熟悉。我试过了,但显然没有成功

以下是错误:


非常感谢您提供的任何帮助。

您会收到一个错误,因为
GetClipboardData()
没有返回
const char*
指针,并且
std::string
构造函数试图将您的参数作为
const char*
读取

正如您在问题中所述,
GetClipboardData()
返回一个
句柄。有关如何使用此函数的正确示例,请参阅主题

其他有用的提示:

  • 按“重试”按钮,您将进入调试器。使用调试器,您可以准确地看到程序出错的地方
  • CB_Data.size()
    是一个无符号整数值(字符串的长度),而不是指针。不要将其与
    NULL
    进行比较
您的错误表明异常发生在第930行。您发布的代码片段中的哪一行是930?第930行来自../include/xstring-它来自
#include
,希望有人能提供帮助。