2017-03-28 50 views
0

我的程序應該採用任意數量的單字文本字符串參數,每個字符長度不超過128個字符。它將stdin中的任何文本複製到標準輸出中,除了輸入中看到的任何單詞都用單詞CENSORED替換。到目前爲止它有點作品。關於如何修復它的任何想法?在STDIN中發現的審查單詞和打印到STDOUT不起作用

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

int main(int argc, char* argv[]){ 
char word[128]; 
int index = 0; 
int c = getchar(); 

while (c != EOF){ 
    //checks for letter and adds to word[] 
    if ((c>='A' && c<='Z') || (c>='a' && c<='z') || c == '\''){ 
     word[index] = (char)c; 
     index++; 
     word[index] = '\0'; 
    } 
    //when c is not a letter or ' (end of word) 
    else{ 
     if (index > 0){ 
      int found; 
      for (int i=1;i<argc;i++){ 
       //if word[] is found in input censor it 
       if (strcmp(word,argv[i]) == 0){ 
        printf("CENSORED"); 
        found = 1; 
        break; 
       } 
      } 
      //prints word[] if it's not in input 
      if (found != 1){ 
       printf("%s",word); 
      } 

     } 
     //resets word[] and index/prints value of c 
     word[0] = '\0'; 
     index = 0; 
     printf("%c",(char)c); 
    } 
    //increment c 
    c = getchar(); 
} 
} 
+0

歡迎來到堆棧溢出!這聽起來像你可能需要學習如何使用[調試器](https://en.wikipedia.org/wiki/Debugger)來遍歷你的代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:[如何調試小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –

+0

你說它有效,你需要什麼樣的修復?請編輯你的問題並描述問題。 –

回答

1

我看到兩個問題。首先,如果你得到一個大於127個字符的單詞,你不應該溢出你的緩衝區。變化:

word[index] = (char)c; 
    index++; 

到:

if (index+1 < sizeof(word)) { 
     word[index] = (char)c; 
     index++; 
    } 

另一個問題,可能你已經注意到了一個,就是你沒有初始化found。做它:

 int found = 0;