如您所见,我正在尝试过滤各种不良词。我有一些代码可以这样做。我正在使用C,这也适用于GTK应用程序。
char LowerEnteredUsername[EnteredUsernameLen];
for(unsigned int i = 0; i < EnteredUsernameLen; i++) {
LowerEnteredUsername[i] = tolower(EnteredUsername[i]);
}
LowerEnteredUsername[EnteredUsernameLen+1] = '\0';
if (strstr(LowerEnteredUsername, (char[]){LetterF, LetterU, LetterC, LetterK})||strstr(LowerEnteredUsername, (char[]){LetterF, LetterC, LetterU, LetterK})) {
gtk_message_dialog_set_markup((GtkMessageDialog*)Dialog, "This username seems to be innapropriate.");
UsernameErr = 1;
}
我的问题是,它只会过滤if语句中指定的最后一个坏词。在此示例中,为“ fcuk”。如果我输入“ fuck”,则代码会将其作为干净代码传递。我怎样才能解决这个问题?
最佳答案
(char[]){LetterF, LetterU, LetterC, LetterK}
(char[]){LetterF, LetterC, LetterU, LetterK}
您忘记了用
'\0'
终止字符串。在我看来,这种方法在防止〜坏词〜脱离源代码方面似乎不是非常有效,因此我真的建议只编写常规字符串文字:if (strstr(LowerEnteredUsername, "fuck") || strstr(LowerEnteredUsername, "fcuk")) {
清楚得多。如果确实是这样,那么其他一些间接但不易出错的方法是:
"f" "u" "c" "k"
要么
#define LOWER_F "f"
#define LOWER_U "u"
#define LOWER_C "c"
#define LOWER_K "k"
和
LOWER_F LOWER_U LOWER_C LOWER_K
关于c - 我需要帮助来过滤C语言中的坏词吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58333866/