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

Frage zu C?

  • monkey06
  • 25. November 2013 um 14:14
  • Unerledigt
  • monkey06
    3
    monkey06
    Mitglied
    Punkte
    60
    Beiträge
    9
    • 25. November 2013 um 14:14
    • #1

    Hallo, ich lerne zurzeit C und bin dabei etwas zu testen, um es später in mein Programm, was ich für meinen Kurs im Studium programmiern muss, einzubauen.

    int main () {

    int i;

    typedef struct Einkunde {
    int id;
    char name[128];
    char vorname[128];
    } Kunde;

    Kunde meineKunden[100];

    for (i=0; i<100; i++) {
    printf("KundenID für Kunden %d eingeben: ", i);
    scanf("%d", meineKunden[i].id);
    printf("Nachname eingeben: ");
    scanf("%s", meineKunden[i].name);
    printf("Vorname eingeben: ");
    scanf("%s", meineKunden[i].vorname);
    }
    return 0;
    }

    Das compilieren funktioniert ohne Probleme.
    Ich würde gerne wissen wieso ich diese "segmentation fault(core dumped) Fehlermeldung bekomme, nachdem ich die KundenID eingebe?
    Laut meinen Vorgaben, habe ich das so geschrieben. Ich habe es nach paar kleineren Änderungen zum Laufen bekommen, nach weiteren Änderungen lief es wieder nicht. Blöderweise habe ich die Version, wo es funktioniert hat überschrieben.
    In diesem Zustand soll das nicht zu meinem Programm hinzugefügt werden, dies dient nur zu Testzwecken.

    Danke

  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    Punkte
    2.626
    Beiträge
    428
    • 25. November 2013 um 14:45
    • #2

    Die Zeile

    Code
    scanf("%d", meineKunden[i].id);


    muss richtigerweise so lauten:

    Code
    scanf("%d", [B]&[/B]meineKunden[i].id);

    scanf erwartet als zweiten Parameter die Adresse einer Variablen, wo der eingelesene Wert hingeschrieben wird. Du übergibst stattdessen den Wert der (uninitialisierten) Variablen id selbst. scanf versucht dann an eine Stelle im Speicher zu schreiben, die nicht für dein Programm reserviert ist.

    Die anderen beiden scanf-Zeilen sind übrigens richtig, weil name und vorname Arrays sind, und meineKunden[i].name bzw. meineKunden[i].vorname automatisch die Adresse des ersten Elements bezeichnen (alternativ wäre &meineKunden[i].name[0] und &meineKunden[i].vorname[0] auch möglich).

  • Privacy
    4
    Privacy
    Mitglied
    Reaktionen
    7
    Punkte
    157
    Beiträge
    30
    • 25. November 2013 um 14:47
    • #3

    Der Grund ist, dass du bei

    Code
    [COLOR=#333333]scanf("%d", meineKunden[i].id);[/COLOR]

    die Funktion scanf eine Integer setzen lässt. Eine Funktion kann aber nur eine Variable setzen, wenn Sie die Referenz auf den Speicherbereich hat.
    Bei name und vorname funktioniert es deshalb, weil Arrays (in diesem Fall char[]) nichts anderes als Pointer sind (char*).
    Damit dein Beispiel funktioniert, muss du einfach nur die Adresse von meinkunde[i].id übergeben, anstatt den Wert der Variable:

    Code
    [COLOR=#333333]scanf("%d", &meineKunden[i].id);[/COLOR]

    Edit: Christoph war schneller :frowning_face:

    Privacy

    TI, SE-Student - Software/Hardware Engineer

    Einmal editiert, zuletzt von Privacy (25. November 2013 um 15:20)

  • monkey06
    3
    monkey06
    Mitglied
    Punkte
    60
    Beiträge
    9
    • 26. November 2013 um 11:18
    • #4

    Super, danke euch beiden :winking_face:

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    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