本文介绍了Ç - 更换的话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里的目标是要读取从标准输入重定向的文件中的文本,然后更换一定的argv传递字改为。

例如,如果我运行:

  $ ./a.exe线474; input.txt中

其中,input.txt的是检测线合一,到了最后我应打印测试取代的。
我不太肯定我的code是怎么了,有时我得到段错误,我也不能肯定我怎么会去打印newOut字符串,或者如果我甚至需要之一。

作为一个方面说明,如果我读使用与fgets,如果什么字符59启动礼,那么,它开始作为第0指数下一个读命令,呢重读。难道这不是不计为一个字符串来的strstr搜索?

任何帮助是AP preciated,谢谢

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
#包括LT&;&string.h中GT;INT主(INT ARGC,字符** argv的){    焦炭FILEREAD [60];
    CHAR newOut [];
    而(!的feof(标准输入)){
        与fgets(FILEREAD,60,标准输入); //一次读取文件的60个字符
        如果(的strstr(FILEREAD,argv的[1])){如果argumentv [1]包含在FILEREAD //
            函数strncpy(newOut,FILEREAD,strlen的(ARGV [1])); //替换
        }
    }        返回(0);
}


解决方案

正如我在评论你的previous问题的更好的方法:

This is a rather straight-forward implementation of the described algorithm.

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

int main(int argc, char **argv)
{
    assert(argc > 1);
    char fileRead[4096];  /* Show me a desktop computer where this causes trouble! */
    char replace[] = "Replaced!";
    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);
    }

    return (0);
}

Note that the position of the assert() makes this C99 code; place it after the definition of word_len and it becomes C89 code.

这篇关于Ç - 更换的话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 17:54