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配列ではないようです。何か案は?
文字列を消毒するときは、通常ブラックリストよりホワイトリストを作成する方がよいでしょう。 – stark
「非表示/非ASCII」とはどういう意味ですか? €やéのようなすべての非ASCII文字を禁止しますか?すべての「見えない」文字(それが意味するもの)をすべて禁止しますか? – anatolyg
'std :: isprint'を見てください:http://en.cppreference.com/w/cpp/string/byte/isprint –