1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Frage zu C?

  • monkey06
  • 25. November 2013 um 14:14
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • monkey06
    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.
    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
    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 :(

    Privacy

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

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

    Super, danke euch beiden ;)

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum