C 替换文件中的字符

C 替换文件中的字符,c,C,我需要用我的文件.txt中的特定字符替换每个字母字符。 我编写了以下代码片段: FILE *file; char c; file = fopen(filename, "r+"); char chars[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v',

我需要用我的文件.txt中的特定字符替换每个字母字符。 我编写了以下代码片段:

FILE *file;
char c;
file = fopen(filename, "r+");

char chars[] = { 'a', 'b', 'c', 'd', 'e', 
                 'f', 'g', 'k', 'l', 'm',
                 'n', 'o', 'p', 'r', 's', 
                 't', 'u', 'v', 'w', 'x', 
                 'y', 'z'};
    while ((c = getc(file)) != EOF) {
        if (c == 'd') {
            continue;
        }
        if (strchr(chars, c) != NULL) {
            fseek(file, 0, SEEK_CUR);
            fputc((int)specific_char, file);
            fflush(file);
        }
    }
    fclose(file);
}
但出于某种原因,它会替换我文件中的所有字符。但是我需要替换除“d”之外的所有

我的代码有什么问题?(代码应该用C编写,而不是用C++)

谢谢大家。

我看到了几个bug:

对于初学者,您的“chars”数组上应该有一个null char,这样strhr调用就可以按预期工作:

char chars[] = { 'a', 'b', 'c', 'd', 'e', 
                 'f', 'g', 'k', 'l', 'm',
                 'n', 'o', 'p', 'r', 's', 
                 't', 'u', 'v', 'w', 'x', 
                 'y', 'z', '\0'};
您可以同样轻松地用字符串声明替换上述数组。您不需要显式的空字符,因为它隐式地是字符串文本的一部分

char* chars= "abcdefghijklmnopqrstuvwxyz";
此外,本声明:

fseek(file, 0, SEEK_CUR);
是一个没有行动的人,什么都不做。我想您应该将文件指针向后设置一个字符。因此,这就是您想要的:

fseek(file, -1, SEEK_CUR);

不需要调用
fflush
,它只会影响性能。可能对调试有用,但您可能不需要它。

此语句:
fseek(文件,0,SEEK\u CUR)
是一个no op,不做任何操作。但是如果我删除此语句,我的代码将停止替换任何字符