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);
-Sven-
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org