1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

C Anfängerproblem

  • Erdös-Index 97
  • 17. Oktober 2008 um 10:00
  • Unerledigt
  • Erdös-Index 97
    3
    Erdös-Index 97
    Mitglied
    Punkte
    55
    Beiträge
    8
    • 17. Oktober 2008 um 10:00
    • #1

    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:

    Code
    a
    b
    c

    -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.

    Sicher is des ane: A Apfel is ka Banane

  • Paulchen
    1
    Paulchen
    Gast
    • 17. Oktober 2008 um 10:13
    • #2
    Zitat von Erdös-Index 97

    -Wall gibt keine Fehler, splint mein nur dass line nicht initialisiert ist, line=""; macht aber auch keinen Unterschied.

    Du musst so viel Speicher für line allokieren (malloc und so), sodass alles, was fgets liest, reinpasst.

  • Erdös-Index 97
    3
    Erdös-Index 97
    Mitglied
    Punkte
    55
    Beiträge
    8
    • 17. Oktober 2008 um 10:32
    • #3

    ah jetzt hauts hin, vielen dank!

    Sicher is des ane: A Apfel is ka Banane

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung