C 用字符串替换文本文件中的行

C 用字符串替换文本文件中的行,c,file,multidimensional-array,file-handling,C,File,Multidimensional Array,File Handling,我正在学习C语言中的文件处理。我编写了代码,用用户输入的字符串替换文件中的一行。替换过程本身非常有效,但不知何故,第一行总是空的,我能够理解哪里出了问题 此外,我还有一些关于文件处理本身和跟踪代码中错误的问题。我现在明白了,我应该使用peror()和errno。这将是我接下来要读的内容 为什么我不应该使用“w+”建立文件流?(这里的一位用户告诉我最好不要使用它,不幸的是我无法得到解释) 我试图使用gdb来发现错误,但是当我显示文件存储数组时,我只得到数字,因为它显然是一个int数组,我如何改进

我正在学习C语言中的文件处理。我编写了代码,用用户输入的字符串替换文件中的一行。替换过程本身非常有效,但不知何故,第一行总是空的,我能够理解哪里出了问题

此外,我还有一些关于文件处理本身和跟踪代码中错误的问题。我现在明白了,我应该使用peror()和errno。这将是我接下来要读的内容

  • 为什么我不应该使用“w+”建立文件流?(这里的一位用户告诉我最好不要使用它,不幸的是我无法得到解释)
  • 我试图使用gdb来发现错误,但是当我显示文件存储数组时,我只得到数字,因为它显然是一个int数组,我如何改进变量的显示
  • gdb中有什么好方法可以追踪我在代码中犯的错误
守则:

#include <stdio.h>
#include <stdlib.h>

#define MAXLENGTH 100

int main(int argc, char *argv[]){

    FILE *fileRead;
    char fileName[MAXLENGTH],newLine[MAXLENGTH];
    int fileStored[MAXLENGTH][MAXLENGTH];
    short lineNumber, lines = 0;
    int readChar;

    printf("Input the filename to be opened:");
    int i = 0;
    while((fileName[i] = getchar()) != '\n' && fileName[i] != EOF && i < MAXLENGTH){
        i++;
    }
    fileName[i] = '\0';

    if((fileRead = fopen(fileName, "r")) == NULL){
        printf("Error: File not found!\n");
        return EXIT_FAILURE;
    }
    i = 0;
    while((readChar = fgetc(fileRead)) != EOF){
        if(readChar == '\n'){
            fileStored[lines][i] = readChar;
            i = 0;
            lines++;
        }
        fileStored[lines][i] = readChar;
        i++;
    }

    fclose(fileRead);
    fileRead = fopen(fileName, "w");

    printf("Input the content of the new line:");

    i = 0;
    while((newLine[i] = getchar()) != '\n' && newLine[i] != EOF && i < MAXLENGTH){
        i++;
    }
    newLine[i] = '\0';

    printf("There are %d lines.\nInput the line number you want to replace:",lines);
    scanf("%d",&lineNumber);

    if((lineNumber > lines) || (lineNumber <=0)){
        printf("Error: Line does not exist!");
        return EXIT_FAILURE;
    }

    int j = 0;

    for(i = 0; i < lines; i++){
        if(i == lineNumber-1){
            fprintf(fileRead,"\n%s",newLine);
            continue;
        }
        do{
            fputc(fileStored[i][j],fileRead);
            j++;
        }while(fileStored[i][j] != '\n');
        j = 0;
    }       

    fclose(fileRead);

    return EXIT_SUCCESS;
}
#包括
#包括
#定义MAXLENGTH 100
int main(int argc,char*argv[]){
文件*文件读取;
字符文件名[MAXLENGTH],换行符[MAXLENGTH];
int fileStored[MAXLENGTH][MAXLENGTH];
短线号,线=0;
int-readChar;
printf(“输入要打开的文件名:”);
int i=0;
而((fileName[i]=getchar())!='\n'&&fileName[i]!=EOF&&ilines)|(lineNumber 1)
while((fileName[i]=getchar())!='\n'&fileName[i]!=EOF&&i
-->
而((readChar=getchar())!='\n'&readChar!=EOF&&i
fileName[i]!=EOF
您不应将equal
char
类型与EOF进行比较。2)
“\n%s”
:在内容之前输出换行可能是错误的。它应该是逐行处理。
EOF
是一个
int
值,而不是
char
fgetc
返回一个int,但是一半的代码将该值存储到
char
s中,然后才与
EOF进行比较
.5-1)此外,如果最后一行没有换行符,最好使用FGET。