2014-01-28 95 views
0

我發現這個網站來自谷歌,我認爲這裏的人幫助編碼問題。正則表達式和無效空指針表達式

我正在爲應用程序創建一個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. 
} 

所以這個應用程序監視從禁止的話剪貼板。然而,大多數時候我遇到了「Expression:Invalid null pointed」 - 錯誤,而我對Visual Studio調試器不熟悉。我試過了,但很顯然沒有成功。

以下是錯誤:http://i.stack.imgur.com/wACnA.png

任何幫助將不勝感激,謝謝。

+0

您的錯誤表示在第930行發生了異常。您發佈的代碼段中的哪一行是930? –

+0

930行來自../include/xstring - 它包含在#include中' – user2757439

+0

希望有人可以提供幫助。 – user2757439

回答

0

你得到一個錯誤,因爲GetClipboardData()不返回const char*指針和std::string構造函數試圖讀取你的參數作爲const char*

正如您在問題中所述,GetClipboardData()返回HANDLE。有關如何使用此功能的正確示例,請參見this主題。

其他有用的提示:

  • 按「重試」按鈕,您將在調試器着陸。使用調試器,您可以確切地看到程序出錯的地方
  • CB_Data.size()是一個無符號整數值(字符串的長度),不是指針。不要把它與NULL比較!