2016-07-11 9 views
0

C++のゲームエミュレータ用の単純なプラグインを開発中です。 :または;C++の文字配列から見えないグリフを検出する

コードは、これまでのところ、次のようになります:

#include "common/hercules.h" 
#include "common/memmgr.h" 
#include "common/mmo.h" 
#include "common/socket.h" 
#include "common/strlib.h" 
#include "map/clif.h" 
#include "map/pc.h" 

#include "plugins/HPMHooking.h" 
#include "common/HPMDataCheck.h" 

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

HPExport struct hplugin_info pinfo = { 
    "GM Impersonate", // Plugin name 
    SERVER_TYPE_MAP, // Which server types this plugin works with? 
    "1.0",    // Plugin version 
    HPM_VERSION,  // HPM Version (don't change, macro is automatically updated) 
}; 

bool my_pc_process_chat_message(bool retVal___, struct map_session_data *sd, const char *message) { 
    if (retVal___ == true) { 
     if (stristr(message, " ")) { 
      clif->messagecolor_self(sd->fd, COLOR_RED, "Possible GM Impersonation Detected - you cannot use more than 3 spaces in chat."); 
      return false; 
     } 
     if (stristr(message, " : ") || stristr(message, " ; ")) { 
      clif->messagecolor_self(sd->fd, COLOR_RED, "Possible GM Impersonation Detected - you cannot use : or ; in chat."); 
      return false; 
     } 
    } 
    return true; 
} 

HPExport void plugin_init(void) { 
    addHookPost(pc, process_chat_message, my_pc_process_chat_message); 
} 

私はないです プラグインの目的は、ユーザによって投稿されたメッセージは、これらの文字列と3つの以上のスペースまたはメッセージが含まれているかどうかを検出することですC++のプログラマーである私は、サンプルコードを使ってこのコードを実行しました。これは奇跡的に働いているようです。私は今、この小さなプラグインを、空白文字のように、文字列message char配列内で検出するように改良しようとしています。

どうすればこの問題を解決できますか?

私はこの投稿を見つけました。https://stackoverflow.com/a/15813530/2332336ですが、これは文字列であり、char配列ではないようです。何か案は?

+0

文字列を消毒するときは、通常ブラックリストよりホワイトリストを作成する方がよいでしょう。 – stark

+0

「非表示/非ASCII」とはどういう意味ですか? €やéのようなすべての非ASCII文字を禁止しますか?すべての「見えない」文字(それが意味するもの)をすべて禁止しますか? – anatolyg

+1

'std :: isprint'を見てください:http://en.cppreference.com/w/cpp/string/byte/isprint –

答えて

0

8ビットASCIIコードを取り除くことのみを扱うように見えるため、あなたがリンクしているソリューションは「不可視/非ASCII」と同じであるかどうかはわかりません。しかし、あなたがリンクしているソリューションを試してみたいのであれば、char配列と文字列の違いをあなたのやり方で見せる必要はありません。 Stringクラスには、変換するコンストラクタがあります。

string mystring(message); 

その後、あなたはそれはあなたが期待していたものを取得するかどうかを確認するためにリンクされた溶液から「stripUnicode」メソッドを使用して自由に感じることができます。

+0

は 'mystring' C++関数ですか? – Latheesan

+0

mystring(または名前を付けたいもの)は、string型の新しいオブジェクト変数になります。 stripUnicodeのメソッドのように見えます。これはパラメータとしてUnicodeのビットを削除するように動作します。あなたはそれを「ミストリング」と名付ける必要はなく、あなたがやっていることにもっと意味をなさない何かに名前を付けることをお勧めします。 –

+0

私は使用しているこのC++プロジェクトで 'string'へのアクセス権がないようですが、このエラーが出ます:' identifier "string" undefinedです " – Latheesan

関連する問題