尝试替换文件中的单词时出现奇怪的故障

Odd glitches occurring when trying to replace word in a file

这个问题分为 3 个部分:“想法”、“假设”和“代码 MRE ',这样你就可以帮助我清楚、快速、最轻松地指出我的愚蠢行为,而且因为按频率降序排列,大多数错误在于算法、实施过程中所做的假设以及实际中的假设代码。

想法:

假设:

代码M.R.E:

int main(){
    char frep[261]; getf scanf("%260[^\n]",frep);eat(); // stores fname in frep[], clears stdin
    FILE * rep = fopen(frep,"r");FILE * tmp = fopen("Temp.Ctt","w");// opens file for reading and tmp for writing
    if(rep==NULL||tmp==NULL){
        perror("\nError ");fclose(rep);fclose(tmp);
    }
    else{
        char target[501]; printf("\n Target : "); scanf("%500s",target);eat(); // gets target word
        char replace[501]; printf("\n Replacement : "); scanf("%500[^\n]",replace);eat();// gets its replacement
        char buffer[501]; long long i=0; int EOW[100000];
        while(1){
            char ch = fgetc(rep);
            if(ch==EOF)
                break; // breaks loop if EOF reached
            else if(ch==' '||ch=='\t'||ch=='\n'||ch == '[=10=]')
                i++;EOW[i]=ch;
        }
        rewind(rep);
        for(int q=1; q<i; q++){
                fscanf(rep,"%500s",buffer);
                if(strcmp(target,buffer)==0)
                    strcpy(buffer,replace);
                fprintf(tmp,"%s%c",buffer,EOW[q]);
        }
        fclose(rep);fclose(tmp);
        remove(frep); rename("Temp.Ctt",frep);
        printf("\nSucess.\n\nReplaced any instances of \"%s\" with \"%s\".\n",target,replace);
    }
    
    return 0;
}
    else if(ch==' '||ch=='\t'||ch=='\n'||ch == '[=10=]')
        i++;EOW[i]=ch;

缺少 { ... } 大括号,导致 EOW[i]=ch; 落在 之外else if

    for(int q=1; q<i; q++){

考虑到 EOW 的编号方式,使其成为 q <= i 否则它会跳过最后一个元素。

int EOW[100000];

不相关,但您可以将其设为 char EOW,因为没有充分理由将其设为 int