im buch 'C von A bis Z' steht folgendes geschrieben:
---------------------------------------------
1 | #include <stdio.h>
|
2 | #include <stdlib.h>
|
3 | #include <string.h>
|
4 | #define MAX 255
|
5 | char *eingabe(char *str) {
|
6 | char input[MAX];
|
7 | printf("Bitte \"%s\" eingeben: ",str);
|
8 | fgets(input, MAX, stdin);
|
9 | return strtok(input, "\n");
|
10 | }
|
11 | int main(void) {
|
12 | char *ptr;
|
13 | ptr = eingabe("Vorname");
|
14 | printf("Hallo %s\n", ptr);
|
15 | ptr = eingabe("Nachname");
|
16 | printf("%s, interssanter Nachname\n", ptr);
|
17 | return EXIT_SUCCESS;
|
18 | }
|
Der Funktion eingabe() wird hierbei als Argument die Adresse eines
Strings übergeben. In der Funktion werden Sie aufgefordert, einen Namen
einzugeben. Die Anfangsadresse des Strings geben Sie mit folgender Zeile
zurück:
1 | return strtok(input, "\n");
|
Die Funktion strtok() liefert ja selbst als Rückgabewert einen
char-Zeiger zurück. Da die Funktion fgets() beim Einlesen von der
Standardeingabe das Newline-Zeichen mit einliest, haben Sie hierbei
gleich zwei Fliegen mit einer Klappe geschlagen. Das Newline-Zeichen
wird mit strtok() entfernt, und die Funktion liefert auch gleich die
Anfangsadresse des Strings input als Rückgabewert zurück, welchen Sie
gleich mit return weiterverwenden. Doch Vorsicht, Folgendes funktioniert
nicht:
1 | char *eingabe(char *str) {
|
2 | char input[MAX];
|
3 | printf("Bitte \"%s\" eingeben: ", str);
|
4 | fgets(input, MAX, stdin);
|
5 | return input;
|
6 | }
|
Normalerweise sollte hier der Compiler schon meckern, dass etwas nicht
stimmt. Spätestens aber, wenn Sie das Beispiel ausführen, werden Sie
feststellen, dass anstatt des Strings, den Sie in der Funktion eingabe()
eingegeben haben, nur Datenmüll ausgegeben wird.
---------------------------------------------
die strtok funktion liefert ja auch nur einen pointer auf den
übergebenen string , dh. der test mittels return strtok(input, "\n");
sollte auch nur datenmüll liefern ?