Array als Rückgabewert
-
Hallo,
Wie kann man einen String bzw. Array von einer Funktion zurückgeben lassen?
Anstatt einfach 0 oder 1 mit return zurückzugeben würde ich gerne stdin bzw einen string zurückgeben (genau wie ich vorher einen wert an die funktion gegeben habe - func(stdin). Wie muss da die Syntax aussehen?mfg Christoph
-
funktionen können pointer auf arrays zurückgeben, arrays (im sinne einer kopie) nicht. jedenfalls nicht direkt. dazu müsste das array in einer struct sein. übrigens: stdin ist ein FILE*, kein string.
-
Hallo,
Das Müsste dann wohl so in etwa aussehen ?!:
(Irgendwas muss falsch sein -funkt nicht)void main() { int *str; printf("Eingabe:"); *str=func(stdin); printf("%s",str); } int* func() { char str[BUFSIZ]; scanf("%s",&str); return str; }
-
1. die main Funktion muss vom Typ int sein und 0 bei Erfolg zurückgeben
2. func liefert einen int-Zeiger, du deklarierst aber ein char-Arrays und lieferst einen char-Zeiger. Compiler sollte Warnung abgeben. Warnungen sind da, um gelesen zu werden und nicht um sie vollkommen zu ignorieren (wie viele Programmierer es leider tun)
3. str ist eine Variable, deren Gültigkeitsbereich sich ausschließlich auf func() beschränkt, d.h. du gibst einen Zeiger zurück, der auf nicht unbedingt benutzbaren Speicher zeigt (nach Beendigung von func() versteht sich). Abhilhe schafft entweder das Reservieren von dynamischen Speichers (Keyword: man: malloc(3)) oder einen Zeiger als Parameter zu bekommen und diesen verwenden, um Daten zu schreiben.
-
Hallo,
Leider bin ich noch ein ziemlicher Anfänger in C und kann daher die Medlungen des Compilers noch nicht wirklich interpretieren.
Die Lösung mit den Zeigern für den Rückgabewert ist leider auch noch ein wenig zu kompliziert für mich.
Ich hab mir daher folgende Lösung einfallen lassen:
void put_stdin(buf) { char buf2[sizeof(buf)]; int c; for(c=0;buf[c]!=EOF;c++) {ungetc(buf[c],stdin);} scanf("%s",&buf); for(c=0;buf2[c]!=EOF;c++) {ungetc(buf2[c],stdin);} }
Wenn ich diese Funktion in andere Funktionen einbette kann ich den gewünschten Rückgabewert einfach in stdin schreiben. Und stdin ist ja automatisch in allen funktionen verfügbar. Also habe ich so die Zeiger umgangen.
Leider gibt er mir aber noch folgenden Fehler für die ungetc funktionen aus:
"subscripted value is neither array nor pointer."(falls sich jemand wundern sollte: Ich habe die for schleife 2mal hintereinander, weil die funktion die zeichen in umgekehrter Reihenfolge verarbeitet -> 2mal=wieder richtig herum)
Gute Nacht Christoph
-
void main() { char str[BUFSIZ]; printf("Eingabe:"); func(str); printf("%s",str); } void func(char *str) { scanf("%s",str); }
So kannst du in main dein char-Array erzeugen und es in der Funktion füllen (da ein Zeiger auf das Array übergeben wurde). Dir ist aber wahrscheinlich klar, dass du dir in diesem Fall den Umweg über die Funktion sparen könntest, da sie sowieso nur scanf aufruft, ne? Zu Übungszwecken aber in Ordnung...