本文介绍了Ç - 更换的话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在这里的目标是要读取从标准输入重定向的文件中的文本,然后更换一定的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.
这篇关于Ç - 更换的话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!