c中的检查词

时间:2015-03-16 17:22:11

标签: c string stdout stdin

我一直在研究一种审查单词的功能。我已经创建了这个函数并且它可以工作,除了它只接受一个参数。例如,当我执行“./a.out test< example.txt”时,它将“test”替换为“example.txt”中的CENSORED。但是当我添加另一个时,例如“./a.out test test2< example.txt”,它只替换“test”,而不是“test”和“test2”。

有人可以帮我解决我的问题吗?我不知道我做错了什么。

这是功能:

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

int main(int argc, char **argv)
 {
assert(argc > 1);
char fileRead[4096];  
char replace[] = "CENSORED"; 
size_t word_len = strlen(argv[1]);

while (fgets(fileRead, sizeof(fileRead), stdin) != 0)
{
    char *start = fileRead;
    char *word_at;
    while ((word_at = strstr(start, argv[1])) != 0)
    {
        printf("%.*s%s", (int)(word_at - start), start, replace);
        start = word_at + word_len;
    }
    printf("%s", start);
}
    printf("\n");

return (0);
}

1 个答案:

答案 0 :(得分:1)

我建议您在argv元素1argc - 1之间放置一个中间循环。在每次迭代中,它将处理该行以审查相应的参数,就像您的函数现在仅对第一个参数一样。

int arg;

for (arg = 1; arg < argc; arg += 1) {
    /* ... censor argv[arg] ... */
}

请注意,您也可以删除assert(),因为构造参数访问自然会避免访问其边界之外的argv数组(如果没有指定参数,程序将在没有审查任何事情)。