c - 我如何过滤字符串以便只允许字母数字字符通过

标签 c

我目前正在为服务器编写日志解析脚本,为了防止用户输入恶意命令,我需要从输入的字符串中过滤掉除字母数字字符(同时允许下划线)之外的所有字符,尽管不幸的是我这样做了不知道该怎么做,所以我只是想知道是否有人可以告诉/告诉我该怎么做才能实现这一目标,谢谢!再举个例子,假设有人输入以下内容:stack#@_over%flow,然后程序会过滤掉非字母数字字符(下划线除外),以便只生成 stack_overflow,这在 bash 中的等价物是

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;
}

最佳答案

找到您正在处理的字符串的长度,分配一个该长度的新字符串,遍历输入字符串的每个字符,如果它是字母数字(使用 ctype.h 中的 isalnum())将字符放入结果字符串,否则就跳过它。空终止并将结果字符串复制到输入字符串,释放分配的字符串并返回结果。

关于c - 我如何过滤字符串以便只允许字母数字字符通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557987/

相关文章:

c - 如何使用 printf 以表格格式打印一些值和字符串

c - 运行 FIFO 模拟

arrays - 快速初始化C数组(写入)

c++ - 在多线程iocp服务器中将连接用户列表发送给新连接的用户

C - 指向 int 的局部指针丢失了一半大小

objective-c - 初始化 'Method *' C 时不兼容的指针类型

c - 使用 "jmp *%esp"时操作数类型不匹配

c - Z1 motes - 基站和传感节点之间的通信

c - 努力理解文件指针?

c - 从文件中的一行读取任意数量的以空格分隔的字符