用户键入 $./replace i xy data.txt
data.txt包含“这是一个测试文件,仅测试文件”的字样。因此,所有 i 都将被 xy 替换,即 thxys xys 一个测试 fxyle,仅测试 fxyle
我想我已经很接近了。但是,我的代码没有将 i 替换为 xy,而是将 i 替换为 x。我认为错误在第 38 行 strcpy。但是,从第 30 行到第 40 行的逻辑是否正确?我想说....
对于第一个缓冲区(buf)中的每个元素,
如果 buf element == 'i'将
buf 元素复制到另一个缓冲区(temp),则一次一个字符
将 'xy' 复制到 'i'
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#define BUFFERSIZE 4096
/*replace i xy data.txt */
int main(int ac, char *av[])
{
int in_fd, out_fd, n_chars, BufElement,j,x;
ssize_t nread,nwrite;
off_t newpos;
char buf[BUFFERSIZE],temp[300];
/*Open file containing original data*/
if ( (in_fd=open(av[3], O_RDWR)) == -1 )
{
printf("Cannot open %s\n", av[3]);
exit(1);
}
/*Read characters from file to buffer*/
while ( (nread = read(in_fd , buf, BUFFERSIZE)) > 0 )
{
for (BufElement=0;BufElement < nread;BufElement++)
{
for (j=0; j < strlen(av[1]); j++)
{
temp[BufElement] = buf[BufElement];
if (buf[BufElement] == av[1][j])
strncpy(temp+BufElement,av[2],strlen(av[2])); /*ERROR*/
}
}
}
printf("%s\n",buf);
printf("%s\n",temp);
newpos = lseek(in_fd, 0, SEEK_SET);
nwrite = write(in_fd,temp,36);
close(in_fd);
}
}