gpt4 book ai didi

c - 替换文本文件中的字符 - 逻辑错误?

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:25 24 4
gpt4 key购买 nike

用户类型 $./replace i xy data.txt
data.txt 包含“这是一个测试文件,仅测试文件”的字样。因此,所有的 i 将被替换为 xy,即 thxys xys a test fxyle, test fxyle only

我觉得我很接近。但是,我的代码没有用 xy 替换 i,而是用 x 替换 i。我认为错误在第 38 行 strcpy。但是,第30行到第40行的逻辑是否正确?我想说....

对于第一个缓冲区(buf)中的每个元素
将 buf 元素复制到另一个缓冲区 (temp) 一次一个字符
如果 buf 元素 == 'i'
将 '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);
}

}

最佳答案

你只有一个 BufElement 增量,但是因为你的目标缓冲区可能比输入更大或更小,你应该有两个计数器/指针;一个用于下一个写入目标缓冲区的位置,另一个类似于输入缓冲区。

编辑:伪代码:

while src[i]
if match
dest[j] = replacement
j += strlen(replacement)
i += 1
else
dest[j] = src[i];
i += 1
j += 1

关于c - 替换文本文件中的字符 - 逻辑错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10245415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com