0

私は現在サーバーのログ解析スクリプトに取り組んでおり、ユーザーが悪意のあるコマンドを入力するのを防ぐために、入力された文字列から英数字を除くすべての文字を除外する必要があります(アンダースコアを許可します)が、残念ながら方法はわかりませんこれを行うために、誰かがこれを達成するために何をすべきかを教えて/見せてくれるかどうか疑問に思っていました、ありがとう!また、例として、誰かが次のように入力したとします:stack#@ _ over%flow、プログラムは、stack_overflowだけを生成するために、英数字以外の文字(アンダースコアを除く)を除外します。これは、bashでこれに相当します。

tr -dc [:alnum:]'_'

また、私が次のことを試したことに言及するのを忘れましたが、それでもいくつかの問題が発生します(たとえば、文字列に「!」が含まれている場合、「-bash:!」:eventnotfound」が表示されます。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char ** argv) {
    int i;
    char *p;
    if (argc > 1) {
        for (p = argv[1]; *p != '\0'; p++) {
           if (islower(*p) || isdigit(*p) || *p == '_') {
               putchar (*p);
           }
        }
        putchar ('\n');
    }
    return 0;
}
4

2 に答える 2

4

処理している文字列の長さを見つけ、その長さの新しい文字列を割り当て、入力文字列のすべての文字を反復処理し、英数字の場合(ctype.hのisalnum()を使用)、結果の文字列に文字を入力します。それ以外の場合はスキップしてください。ヌル終了して結果の文字列を入力文字列にコピーし、割り当てられた文字列を解放して結果を返します。

于 2012-05-11T20:14:42.700 に答える
0

正規表現 (regex) は、これを行うための優れた方法です。これを示す例を次に示します。

于 2012-05-11T20:16:14.010 に答える