mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C - String-array dynamisch erweitern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Samuel J. (capstrovor)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche gerade Strings aus einer Datei einzulesen und diese in ein 
String-Array zu schreiben. Dabei möchte ich nach jeder eingelesenen 
Zeile das Array um einen String erweitern.
Das Programm lässt sich auch kompilieren, ich bekomme aber nach dem 
Start einen Segmentation Fault.
Kann mir hier jemand Helfen?
lg
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int get_list();
void get_interprets();

char** interprets = 0;

int main()
{
  int songcount;

  songcount = get_list();
  //get_interprets();

  return 0;
}

int get_list()
{
  FILE *fp;
  char buf[255];
  int songcount = 0;

  fp = fopen("songlist.txt", "r");

  while(fgets(buf, 255, (FILE*)fp))
  {
    interprets = (char**) realloc(interprets, (songcount+1)*sizeof(char*));
    *interprets = (char*) malloc(255*sizeof(char));

    strcpy(interprets[songcount], buf);

    songcount++;
  }

  return songcount;
}

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
*interprets = (char*) malloc(255*sizeof(char));
 strcpy(interprets[songcount], buf);

ist falsch


müsste so sein:
 interprets[songcount] = (char*) malloc(255*sizeof(char));
 strcpy(interprets[songcount], buf);
while(fgets(buf, 255, (FILE*)fp))
wozu der cast?

von Samuel J. (capstrovor)


Bewertung
0 lesenswert
nicht lesenswert
> ist falsch
> müsste so sein:
> interprets[songcount] = (char*) malloc(255*sizeof(char));
> strcpy(interprets[songcount], buf);
Oha.... Dummer Fehler :D Hätte ich selbst sehen sollen... Aber Danke!


> wozu der cast?
Hab die Zeile aus einem älteren Projekt kopiert weil ich mir nicht mehr 
sicher war (schon eine Zeit her dass ich C programmiert habe)... Hier 
ist er natürlich ohne Nutzen... Danke!

Vielen Danke, lg

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Auf Mikrocontroller ist eine derart dynamische Speicherverwaltung 
allerdings ziemlich fehlerträchtig. Ich würde feste Puffergrößen 
bevorzugen, wann immer es geht.

von Samuel J. (capstrovor)


Bewertung
0 lesenswert
nicht lesenswert
Das Programm ist für den PC.

PS: ja ich weiß, ich könnte dafür C++ oder Java nehmen... :D

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Auf dem PC ist das ok.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.