Skip to content
Advertisement

trouble with opening file for read with fopen

I am new to writing c under linux so this will be maybe silly question, but I have problem using fopen. When I encountered the problem I just tried it with this really simple code:

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

int main()
{
   FILE *test;

   if( fopen("test.txt","r") == NULL )
       printf("didnt open");
   else
       printf("opened!");

   fclose(test); 
}

test.txt is in same folder as this code and a.out. When I debug a.out I get:

Breakpoint 1, main () at testit.c:14
14      if( fopen("test.txt","r") == NULL )
(gdb) s
_IO_new_fopen (filename=0x400696 "test.txt", mode=0x400694 "r") at iofopen.c:103
103   iofopen.c: No such file or directory.
(gdb) s
__fopen_internal (filename=0x400696 "test.txt", mode=0x400694 "r", is32=1) at iofopen.c:65
65  in iofopen.c
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
_IO_new_fclose (fp=0x0) at iofclose.c:54
54  iofclose.c: No such file or directory.

I tried changing the path: if( fopen("/home/h1657/Work/test/test.txt","r") == NULL ). Had the same effect.

I am sorry if this is basic question but I can’t find any solution to this.

Advertisement

Answer

Many issues in posted code:

  • You haven’t assign/initialize the file pointer FILE *test;. So it will point to nothing/garbage value. Now closing that using fclose cause undefined behaviour.may be crash your program.

    So the code should be

   FILE *test;
   test = fopen("test.txt","r");
   //close file pointer(after process on file) if fopen success.
  • confirm first what is your file name.if it’s testtest.txt OR
    test.txt OR test.txt.txt(in windows it will occur if you manually give .txt extension and hide the extension ). Need to confirm it
    first then according it give name in code.

  • You have int main.So you should have return 0 at the end of the
    main.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement