2012-05-11 69 views
2

我正在研究一些在進一步發送到程序之前對文本進行過濾的代碼(該代碼除去所有字母數字字符和下劃線之外的所有內容),代碼本身完美工作除了我無法找到一種方法來存儲它的輸出以用於程序的其他部分,如果我不得不猜測,這可能涉及從putchar將stdout保存到變量中,但我找不到更多信息因爲在網上這樣做,如果有人能指出我正確的方向,我會非常感激,謝謝!我如何將putchar的輸出保存到一個變量

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
int main(void) { 
    int i; 
    char *p; 
    char stg[] = "hello"; 
     for (p = &stg[0]; *p != '\0'; p++) { 
      if (isalnum(*p) || *p == '_') { 
      putchar (*p); 
      } 
     } 
     putchar ('\n'); 
    return 0; 
} 
+2

爲什麼不簡單地保存滿足條件的字符?你想對輸出有什麼用處? – PALEN

回答

5

也許我不明白你的「需要」在做過濾的時候使用putchar(),但是你可以將輸入過濾成輸出array of chars以便在過濾後使用,如下所示。

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

int main(void) { 
    int i; 
    char *p; 
    char stg[] = "hel123*^_lo"; 
    char output[200] = {0x00}; 
    int index = 0; 


    p = stg; 
    while(*p) 
    { 
     if (isalnum(*p) || *p == '_') 
     { 
      output[index++] = (char)putchar(*p); 
     }  
     p++; 
    } 
    putchar('\n'); 
    printf("[%s]\n", output); 
    return 0; 
} 

輸出:

hel123_lo 
[hel123_lo] 

編輯:

如果您只想過濾字符串到一個數組,而不顯示使用putchar()你會做這樣的事情的字符串:

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

int main(void) { 
    int i; 
    char *p; 
    char stg[] = "hel123*^_lo"; 
    char output[200] = {0x00}; 
    int index = 0; 


    p = stg; 
    while(*p) 
    { 
     if (isalnum(*p) || *p == '_') 
     { 
      output[index++] = *p; 
     }  
     p++; 
    } 

    printf("[%s]\n", output); 
    return 0; 
} 

你究竟想要怎麼處理濾波後的tex的輸出T'

+0

完美,正是我正在尋找的(關於如何將信息輸出到數組),但有一個問題,如果我想簡單地保存代碼的輸出而不顯示它(所以什麼都不會打印到屏幕上,但是隻能保存到數組中)我將如何去做類似的事情?對C來說比較新,所以在所有方面都不具體,我很抱歉,如果這些都是明顯的問題,謝謝! – lacrosse1991

+0

和輸出的目的,這將是程序的其餘部分和使用服務器的客戶端之間,主要作爲一種安全機制,以幫助防止人們發送服務器惡意輸入 – lacrosse1991

+0

很高興我可以幫助你。我編輯了我的答案,以顯示如何在不使用'putchar()'的情況下將字符串過濾到數組中。如果我有幫助,請接受我的回答,並讓我知道你是否還有其他問題。 – Chimera

3

putchar - int putchar(int ch); - 返回成功寫入的字符,失敗時返回EOF。

沒有什麼能夠阻止你聲明一個int變量,無論是一個標量變量,一個數組元素,還是一個結構體中的字段,並保存你所寫的內容。注意,返回是一個int,而不是char。

根據你寫的內容,你可能需要編寫一些代碼來管理你保存的所有輸出。換句話說,如果我正確地解釋了你的問題,你將不僅僅保存你寫給變量的東西。你可能會想說你在執行putchar的代碼中的位置,甚至是時間。只是猜測。

相關問題