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

