On Mon, 30 Aug 2010 13:09:43 +0200
lano <[email protected]> wrote:

> Nathanael Schweers schrieb:
> > In perl ist ein string ein scalar, in C nicht. 
> > C kennt keinen eigenen typ für strings, sondern strings sind einfach
> > nur Arrays (listen) von chars. Um das Ende zu markieren bekommt das
> > letzte Element den wert 0 (== '\0'). Das ist nicht das Zeichen '0'!
> > Wenn du nun nen string hast und return Text; schreibst ist damit die
> > Adresse des ersten Elements des Arrays gemeint. Darum brauchst du
> > auch einen char * als Rückgabewert, sonst bekommst du bloß ein
> > Zeichen (und einen Kompilerfehler). 
> > Da du kein Array zurückgeben kannst, sondern nur die Anfangsadresse
> > dessen musst du auch vorher das Array an einer Stelle ablegen die
> > beim verlassen der Funktion nicht ungültig wird. Alle lokalen
> > Variablen werden ja schließlich wieder freigegeben - und damit eben
> > auch die Variable Text. Ich schreib mal ein kleines bisschen code
> > hier hin (und verzichte mal um die Verwirrung niedrig zu halten
> > absichtlich auf Fehlerbehandlung):
> >
> >     char *buffer=malloc(BUFSIZE+1); /* +1 für das 0-byte am
> > ende */
> >
> >   
> ich hab nun folgendes was auch funktioniert:
> 
> char *read_file(char *file_name) {
> 
>     FILE *datei;
>     char *buffer=malloc(BUFSIZE+1);
>     buffer[0]=0;
> 
>     if( (datei=fopen(file_name,"r")) == NULL) {
>         fprintf(stderr,"Kann %s nicht oeffnen\n",file_name);
>     return EXIT_FAILURE;
>     }
> 
>     fgets(buffer,BUFSIZE,datei);
> 
> return buffer;
> }
> 
> geh ich jetzt recht in der annahme das ein "free(buffer)" nach dem 
> aufrufen der funktion den speicher dann wieder frei gibt?
> ca so:
> 
> printf("Kanal: %s", read_file("/tmp/currentChannel"));
> free(buffer);
> 
Ja, genau so ist das richtig. 
Gruß, Nathanael

> 
> 
> -Sven-
> 
> --
> ----------------------------------------------------------------------------
> PUG - Penguin User Group Wiesbaden - http://www.pug.org

--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an