Ich versuche mir gerade C beizubringen und scheitere schon ganz am anfang. beim lesen von files produziert fgets nur ein segfault, der folgende code soll das erste zeichen der ersten zeile von "test.txt lesen":
C
/* fgetstest.c */
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int /*@unused@*/argc, char **argv) {
FILE *fp;
char *line;
if ((fp = fopen ("test.txt", "r" )) == NULL ){
fprintf (stderr, "%s: could not open file\n", argv[0]);
exit (EXIT_FAILURE);
}
printf("reading first character of the first line from file:\n");
if (fgets (line, 1, fp) != NULL)
printf("%s",line);
else
printf("%s: could not read file\n", argv[0]);
return 0;
}
Alles anzeigen
test.txt:
-Wall gibt keine Fehler, splint mein nur dass line nicht initialisiert ist, line=""; macht aber auch keinen Unterschied.
Bin leider kein Experte beim Debuggen, das habe ich soweit mit gdb probiert:
Code
(gdb) break main
Breakpoint 1 at 0x80484c8: file fgetstest.c, line 12.
(gdb) run
Starting program: /home/eugen/sysprog/fgetstest
Breakpoint 1, main (argc=1, argv=0xbfcb1984) at fgetstest.c:12
12 if ((fp = fopen ("test.txt", "r" )) == NULL ){
(gdb) step
17 printf("reading first character of the first line from file:\n");
(gdb) print fp
$1 = (FILE *) 0x804a008
(gdb) step
reading first character of the first line from file:
18 if (fgets (line, 1, fp) != NULL)
(gdb) print fp
$2 = (FILE *) 0x804a008
(gdb) print line
$3 = 0x80485a9 "\215�\030���\215\203\030���)���\002\205�t$1�\213E\020\211D$\b\213E\f\211D$\004\213E\b\211\004$�\224�\030���\203�\0019�u�\203�\f[^_]�\213\034$�\220\220U\211�S\203�\004��\226\004\b\203��t\0221���\213\203�\226\004\b\203�\004\203��u�\203�\004[]�\220\220\220U\211�S\203�\004�"
(gdb) step
Program received signal SIGSEGV, Segmentation fault.
0xb7debc42 in fgets () from /lib/tls/i686/cmov/libc.so.6
Alles anzeigen
Wäre sehr dankbar wenn mir jemand helfen könnte.