malloc richtig nutzen??
-
zeig mal den ganzen code bzw. wie du's machst. ich wette das passt nicht ganz zu deiner beschreibung.
-
void ZeileAuslesen (FILE * datei,char **String) { int length=0; if (String == Null){ /**Zeilenlänge Berechnen*/ while (getc(datei)!= '\n'){ length++; } *String = malloc (strlen(*String +1)); fgets(datei,length,String) // Das klappt auch net ?? } }
-
void ZeileAuslesen (FILE *datei, char **string) { char b[512]; // <-- wenn's passt? fgets (b, sizeof(b), datei); *string = malloc (strlen(b)+1); if (*string) strcpy (*string, b); } ... FILE *fp = fopen (...); char *string; ZeileAuslesen (fp, &string); ...
-
Wie kommst du auf 512???????
Willst du damit die maximalen Zeichen in einer Zeile bestimmen, oder was??*String = malloc (strlen(b)+1);
Gibt bei mir immer noch den selben Fehler!!
Ich weiß einfach nicht warum!
-
Thes-One schrieb:
Wie kommst du auf 512???????
Willst du damit die maximalen Zeichen in einer Zeile bestimmen, oder was??richtig. du kannst den wert natürlich vergrössern wenn du willst, 2048 oder sowas. wenn du auf'ner PC-kiste programnierst, sollte genügend stack space vorhanden sein.
-
*String = malloc (strlen(b)+1);
Gibt bei mir immer noch den selben Fehler!!
Ich weiß einfach nicht warum!Zu den 512:
Gibt es den einen Wert der maximal in eine Zeile eingelesen werden kann??
Ich denke mal nicht das eine Zeile unendlich lang sein kann!Warscheinlich OS oder System abhängig, oder???
-
Ich denke mal das das Problem ganz klar daran liegt das man einen Wert String zuweisen möchte doch String hat ja keinen Speicherplatz wenn die Adresse
0x00000000 ist oder????Ich habe String vorher (andere Funktion mit NULL Deklariert)!!
????????????????
-
probier' dies:
#include <stdio.h> #include <string.h> #include <stdlib.h> int ZeileAuslesen (FILE *datei, char **string) { char b[512]; if (0 == fgets (b, sizeof(b), datei)) return 0; *string = malloc (strlen(b)+1); if (*string) strcpy (*string, b); return 1; } int main () { FILE *fp = fopen ("name_deiner_datei", "r"); if (fp) { char *string; while (ZeileAuslesen (fp, &string)) { printf (string); free (string); } } }
...und übrigens: etwas mehr eigeninitiative bitte! es fällt mir auf, dass man dir alles vorkauen muss (nicht so böse gemeint, wie es klingt). spiel mehr rum mit C. schau dir z.b. meinen code an und finde die macken. wenn man dir alles vorbeten muss, dann lernst du nix und verlierst auch bald den spass daran, weil dir die erfolgserlebnisse (dieses: das hab ich selbst geschafft!) fehlen.
-
thx!!
Jetzt geht es!
-
Hi!
Thema Dynamisches Array mit malloc!
Ich habe ein Problem, also einen Fehler in meinem Programm.
Ich habe eine Funktion in der ich die Zeilen einer Datei zähle und jenachdem wieviele Zeilen die Datei hat alloziere ich speicherplatz für eine Variable!
Diese Variable ist ein Dynamisches Array.Im Prinzip pro Zeile einen Index!Das Array wird auch richtig gefüllt aber sobald ich mit der Arbeit in der Funktion fertig bin und in die Main zurück springe beeinhaltet das Array nur noch den Wert vom ersten hinzufügen!
int main (int argc, char * argv[]) { CD * Playlist=NULL; File * Datei = fopen (argv[1], "r"); laden(&Playlist,Datei); }
void laden (CD * PL, FILE * file){ /*Zeilen zählen*/ /*Speicherplatz allozieren fuer PL*/ /*PL fuellen*/ PL->Tracks[0] = ... PL->Tracks[1] = ... /*Fertig*/ }
Die laden Funktion funktioniert einwandtfrei!
Also die Werte werde alle richtig abgespeichert!
Nur wenn ich dann in der Main mir die Werte anschaue, ist nur noch der erste drin!
Also der erste Wert der eingefügt wurde!Kann man so schon einen Fehler erkennen, oder muss man etwas bestimmtes beachten bei der übergabe von Dynamischen Arrays an andere Funktionen???