如您所见,我正在尝试过滤各种不良词。我有一些代码可以这样做。我正在使用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/

10-12 19:09