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


von Samuel J. (capstrovor)


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
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4
5
int get_list();
6
void get_interprets();
7
8
char** interprets = 0;
9
10
int main()
11
{
12
  int songcount;
13
14
  songcount = get_list();
15
  //get_interprets();
16
17
  return 0;
18
}
19
20
int get_list()
21
{
22
  FILE *fp;
23
  char buf[255];
24
  int songcount = 0;
25
26
  fp = fopen("songlist.txt", "r");
27
28
  while(fgets(buf, 255, (FILE*)fp))
29
  {
30
    interprets = (char**) realloc(interprets, (songcount+1)*sizeof(char*));
31
    *interprets = (char*) malloc(255*sizeof(char));
32
33
    strcpy(interprets[songcount], buf);
34
35
    songcount++;
36
  }
37
38
  return songcount;
39
}

von Peter II (Gast)


Lesenswert?

1
*interprets = (char*) malloc(255*sizeof(char));
2
 strcpy(interprets[songcount], buf);

ist falsch


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

von Samuel J. (capstrovor)


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. (Gast)


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)


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. (Gast)


Lesenswert?

Auf dem PC ist das ok.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.