filesegmentation-fault

How to solve a segmentation fault with file i/o in C


I read the input file, which has 911 lines, and want to copy these 911 lines into the output file after making a few changes to each line.

I am getting segmentation fault when I run this. How can I find out why this is happening?

#include<stdio.h>
void main()
{
    int i;
    FILE *fin,*fop;char* str;
    fin=fopen("atk561011.txt","r");
    if(fin=NULL) printf("ip err");
    fop=fopen("svmip.txt","w");
    if(fop=NULL) printf("op err");
    for(i=1;i<=911;i++)
    {
        fgets(str,150,fin);
        if((i>300&&i<=360)||(i>600&&i<=660)) 
            str[7]='1';
        else 
            str[7]='0';
        fputs(str+7,fop);
        putc('\n',fop);
    }
    fclose(fin);
    fclose(fop);
}

Solution

  • For a start, this is wrong:

    if(fin=NULL)
    

    Should be:

    if (fin == NULL)
    

    (the same goes for fop, of course). And if you didn't succeed opening the file - don't just print an error, exit, because what are you going to read from? Keep in mind that the output of printf is buffered and in case of a segfault you won't always see it at all, even if it ran before the fault.

    Another thing: you don't allocate memory for str, yet write into it with fgets.

    And another thing: reading a pre-defined amount of lines from the file is probably a bad idea. It's better to read from the input until there is an end of file, or until a required amount of lines has been read.