2012-05-11 69 views
0

我目前正在爲服務器開發日誌解析腳本,爲了防止用戶輸入惡意命令,我需要過濾除字母數字字符以外的所有字符(同時允許下劃線),但不幸的是我不知道該怎麼做,所以我只是想知道如果有人能告訴/告訴我該怎麼做才能實現這一點,謝謝!也作爲一個例子,有人說輸入以下內容: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; 
} 
+0

也是我試圖跟隨,但它仍然有一些問題(如上圖所示編輯) – lacrosse1991

+0

如果您收到來自當你打電話給你的程序(這看起來不錯,除了可以使用的字符isalnum)bash的錯誤,然後附上您程序參數用單引號括起來。 –

回答

3

找到您正在處理的字符串的長度,分配一個新長度的字符串,迭代輸入字符串的每個字符,如果它是字母數字ic(使用ctype.h中的isalnum())將字符放在結果字符串中,否則就跳過它。空終止並將結果字符串複製到輸入字符串,釋放分配的字符串並返回結果。

+0

謝謝!爲與之合作提供了很好的基礎 – lacrosse1991

0

正則表達式(正則表達式)是一個很好的方法來做到這一點。 這裏是an example來顯示這個。

相關問題