我目前正在为服务器编写日志解析脚本,并且为了防止用户输入恶意命令,我需要从输入的字符串中过滤掉除字母数字字符(同时允许下划线)之外的所有字符,尽管不幸的是我做了不知道怎么做,所以我只是想知道是否有人可以告诉/告诉我该怎么做以实现这一点,谢谢!另外作为一个例子,假设某人输入以下内容:stack#@ _ over%flow,程序将过滤掉非字母数字字符(下划线除外),以便只生成stack_overflow,相当于bash中的这个将是< / p>
tr -dc [:alnum:]'_'
也忘了提到我已尝试过以下内容,但仍遇到一些问题(例如,如果字符串中包含“!”,我会收到“-bash:!”:找不到事件“
#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;
}
答案 0 :(得分:3)
查找正在处理的字符串的长度,分配该长度的新字符串,迭代输入字符串的每个字符,如果它是字母数字(使用来自ctype.h的isalnum())将字符放入结果字符串,否则只是跳过它。 Null终止并将结果字符串复制到输入字符串,释放分配的字符串并返回结果。
答案 1 :(得分:0)
正则表达式(正则表达式)是一种很好的方法。 以下是an example来说明这一点。