正则表达式空指针表达式无效

时间:2014-01-28 18:31:46

标签: c++ regex filter crash expression

我从谷歌找到了这个网站,我认为这里有人帮助解决编码问题。

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

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.
}

所以这个应用程序监视来自禁止词的剪贴板。但是,大多数时候我遇到了“表达式:无效的null指向”-error,而且我不熟悉Visual Studio调试器。我试过了,但显然没有成功。

以下是错误:http://i.stack.imgur.com/wACnA.png

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

您收到错误,因为GetClipboardData()未返回const char*指针而std::string构造函数尝试将您的参数读为const char*

正如您在问题中所述,GetClipboardData()会返回HANDLE。有关如何使用此功能的正确示例,请参阅this主题。

其他有用的提示:

  • 按“重试”按钮,您将进入调试器。使用调试器,您可以确切地看到程序出错的地方
  • CB_Data.size()是无符号整数值(字符串的长度),而不是指针。不要将它与NULL进行比较!