Ergebnis 1 bis 2 von 2

Thema: [C] Segmentation Fault bei Char-Array - Aber wieso?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    [C] Segmentation Fault bei Char-Array - Aber wieso?

    Hallo,

    ich sitze gerade an einer Übungsaufgabe, die eigentlich relativ einfach sein sollte. Seltsamerweise kriege ich aber Segmentation Faults, ohne zu wissen wieso.

    Aufgabenstellung war ein gegebenes Programm, dass Rentenversicherungsnummern einliest und als CSV wieder ausgibt, sicherer zu machen. Unter anderem sollten auch ungültige Nummern abgelehnt werden.

    Folgendes ist der Code:
    PHP-Code:
    int isDigit(char c) {
        if (
    47 59)
            return 
    1;
        else
            return 
    0;
    }

    int isChar(char c) {
        if (
    64 91
            return 
    1;
        else if (
    96 123)
            return 
    1;
        else
            return 
    0;
    }

    int main(int argcchar *argv[]) { 
        
    char csv[14] = "-------------";
        
    char temp[7] = "------";
        
    char ok NULL;
        
    char c='\0';
        
    int endei;
        
    0;
        
    ende 0;
        while (
    ende==0) {
        
    ok fgets(csv13stdin);
        
    printf("Input eingelesen: %s\n"csv);
        
    // Fehler beim einlesen der Daten, oder EOF erreicht
        
    if (ok==NULL) {
            
    ende=1;
            break;
        }
        
    // Überprüfen der erwarteten Zahlenwerte, ob dort auch Zahlen vorliegen
        
    for (i=08i++) {
            if (!
    isDigit(csv[i])) {
                
    ende=2;
                break;
            }
        }
        
    printf("Input auf Zahlen ueberprueft\n"); // Wird noch ausgeführt
        
    if (!isChar(csv[8])) { // Hier hakt es offensichtlich
            
    printf("Fehler bei Buchstaben\n"); // Wird nicht ausgeführt
            
    ende 3;
            break;
        }
        
    printf("Input auf Buchstabe uebeprueft"); // Wird nicht ausgeführt
    // .... 
    Interessanterweise tritt der Fehler nach dem Aufruf der Funktion isChar auf, das hier zuletzt gezeigte printf wird nicht mehr ausgeführt. Zuerst habe ich gedacht es liegt daran, dass csv[8] auf einen ungültigen Speicherbereich verweist, aber der Fehler tritt auch auf, wenn ich die 8 durch zB 2 ersetze, ein Aufruf der in der vorherigen for-Schleife problemlos funktioniert.
    Die isChar-Funktion selber überprüft nur (wie die isDigit-Funktion) ob der Charakter zwischen zwei bestimmten Grenzen liegt, also nichts was eigentlich einen Speicherfehler produzieren sollte.
    Ich bin momentan total überfragt woran der Fehler noch liegen könnte, meine C-Erfahrung ist aber auch nur relativ gering (und liegt schon was länger zurück).

    Edit:
    Fehler gefunden (und behoben). csv[8] gibt nur den Charakter als Integer zurück. Eine eigene Funktion die mir einen Teilstring zurückliefert (Start-Index und länge angegeben) hat das Problem behoben.
    Falls jemand ein ähnliches Problem hat..

    Geändert von MagicMagor (03.05.2011 um 18:39 Uhr) Grund: Fehler gefunden

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •