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);
}
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.