Article View: de.comp.lang.c++
Article #903Re: Problem bei Funktion mit Rueckgabewert
From: Martin Aupperle
Date: Tue, 28 Nov 1995 12:47
Date: Tue, 28 Nov 1995 12:47
119 lines
3613 bytes
3613 bytes
macgoetz@silence.gerwin.net (Markus Goetz) wrote:
>Hallo !
>Wie ist es moeglich, Variablen, die im Hauptprogramm erzeugt wurden
>durch eine Funktion (mit Rueckgabewert) zu veraendern und im
>Hauptprogramm wieder zu benutzen ? Ich habe mir da schon was
>zurecht gebastelt, doch war dies nicht so der bringer.. :-(
>Danke fuer jeden Tip im vorraus..
>Markus_sammelt_Erfahrung
>#include <conio.h>
>#include <stdlib.h>
>#include <stdio.h>
>#include <iostream.h>
>#include <string.h>
>//Funktionsprototypen
>char TextDrehen(char *);
>// Hauptprogramm
>void main(void)
>{
> char *textzeile, zeile[80], *Gedreht;
>// int zahl;
> cout << "Textzeile : ";
> cin >> zeile;
> textzeile = zeile;
> cout << "Die Textzeilenlänge beträgt " << strlen(zeile) << " Zeichen." << endl;
> TextDrehen(textzeile);
> cout << "** Hauptprogramm.." << endl;
> printf("%s\n",zeile);
> cout << textzeile << endl;
> getch();
>}
>char TextDrehen(char *zeiger)
>{
> int i, l;
> char NeueZeile[80], gedreht[80], *rueckgabezeiger;
> strcpy(NeueZeile,zeiger);
> l = strlen(zeiger);
> strcpy(gedreht,NeueZeile);
> for (i=0 ; i <= l-1; i++)
> gedreht[l-i-1] = NeueZeile[i];
> rueckgabezeiger = gedreht;
> cout << "Inhalt von Zeiger : " << rueckgabezeiger << endl;
> return *rueckgabezeiger;
>}
>
Markus, hier gibt's wohl doch noch einige Probleme.
Zunächst nehme ich an, daß TextDrehen den übergebenen String verändern
und das Ergebnis zurückliefern soll. Der Rückgabewert muß also z.B.
char *TextDrehen(char *zeiger)
sein und nicht
char TextDrehen(char *zeiger)
denn sonst gibst Du nur ein Zeichen zurück.
Beachte, daß NeueZeile und gedreht lokale Variable in TextDrehen sind
und nach Beendigung der Funktion nicht mehr zur Verfügung stehen. Es
wäre also nicht gut, einen Zeiger auf diese Variablen zurückzugeben.
TIP: Das Problem kann z.B. durch dynamische Variablen oder statische
Variablen gelöst werden - beides nicht unproblematischt, aber erst
einmal machbar.
Ein weiteres Problem ist die Zahl 80: Woher weißt Du, daß die von
cin >> zeile;
gelesene Anzahl von Zeichen wirklich in den Puffer von 80 Bytes paßt?
Dort solltest Du ebenfalls etwas anderes überlegen.
Eine gute Methode, um Variablen mit Funktionen zu bearbeiten, kann mit
Hilfe von Referenzen realisiert werden. Die Funktion f
void f( int &i ) {
i++;
}
auf die Zeilen
int i= 5;
f( i );
angewendet bewirkt, daß i den Wert 6 erhält. Zur Lösung Deines
Problems muß Du also den Puffer "zeile" per Referenz an die
Bearbeitungsfunktion übergeben. Dort kannst Du ihn direkt bearbeiten,
eine Rückgabe ist nicht erforderlich.
Melde Dich nochmal, wenn diese Infos nicht ausreichen.
------------------------------------------------
Martin Aupperle
100754.2730@compuserve.com
OOA,OOD,OOP with C++, courses,trainig,coaching,C++-books
resources available. email for info
------------------------------------------------
Technical Details
Message-ID:
<49f0nf$2ge@dub-news-svc-4.compuserve.com>Path:
arc1-ca.pugleaf.net!news.compuserve.com!newsmasterReferences:
<70@silence.gerwin.net>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.compuserve.com!newsmaster From: 100754.2730@compuserve.com (Martin Aupperle) Newsgroups: de.comp.lang.c++ Subject: Re: Problem bei Funktion mit Rueckgabewert Date: Tue, 28 Nov 1995 12:47:26 GMT Organization: CompuServe Incorporated Message-ID: <49f0nf$2ge@dub-news-svc-4.compuserve.com> References: <70@silence.gerwin.net> NNTP-Posting-Host: dd42-141.compuserve.com X-Newsreader: Forte Free Agent v0.56