I am learning file handling in C. I wrote code to replace a line in a file with a string input by the user. The replacing progress itself works great, but somehow the first line is always empty and I am able to understand what goes wrong.
Additionally I have some additional questions about file handling itself and about tracking down the mistakes in my code. I understand by now that I should have used perror() and errno. This will be the next thing I will read on.
- Why shouldn't I use "w+" establishing the file stream? (A user on here told me to better not use it, unfortunately I couldn't get an explanation)
- I tried to use gdb to find the mistake, but when I display my fileStored array I get only numbers, since its obviously an int array, how could I improve the displaying of the variable
- What would be a good approach in gdb to track the mistake down I made in the code?
The code:
#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;
}
