0

我正在尝试编写一个名为 replace 的 linux 命令,它将替换文件中的字符。我希望这样称呼它:

$./replace I XY test.txt 

在此示例中,test.txt包含单词“这是一个测试文件”

如何将字符替换'I'"XY". 我曾尝试使用如下代码所示的缓冲区,但由于缓冲区和 argv 的声明方式不同,因此会产生错误。此外,'I'存储在一个数组元素中,而"XY"需要两个。是否存在解决方法?

考虑这个text.txt例子:

[T][H][I][S][ ][I][S][ ][A][ ][T][E][S][T][ ][F][I][L][E]

在此示例中,第三个索引(包含'I')必须替换为"XY"

这是我的代码,存在上述问题:

#define BUFFERSIZE 4096

/*replace i xy data.txt */
int main(int ac, char *av[])
{
    int in_fd, out_fd, n_chars, BufElement,j;
    char buf[BUFFERSIZE];
    in_fd=open(av[3], O_RDWR);

    /*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++)
            {
                if (buf[BufElement] == av[1][j])
                    buf[BufElement] = av[2]; /*ERROR*/
            }/*for*/
        }/*for*/
    }/*while*/
}/*main*/
4

1 回答 1

1

buf[BufElement]是一个字符并且av[2]是一个字符串(特别是字符指针)。您不能像您所做的那样将两者等同起来(buf[BufElement] = av[2];)此外,即使有可能,您也不能在 C 中轻松地将缓冲区中的 1 个字节替换为 2 个字节。它将覆盖下一个字符。

您需要复制文件内容,直到在临时缓冲区中找到匹配项,将替换字符串附加到此临时缓冲区,然后复制文件的剩余内容。

于 2012-04-20T06:32:16.013 回答