String zurueckgeben in C

Hallo,
ich bin gerade am lernen von C und bin dabei auf ein problem gestossen.
Ich moechte eine funktion haben, die einen string wieder gibt, ich weiss, dass das mit einem pointer geht, weiss haltn ur nicht wie.
Ausserdem gibt es ja noch eine andere moeglich, dass ich einen pointer auf einen schon vorhandene string habe (der z.B. in main ist) und diesen dann mit hilfe des pointers umaendern moechte.
Ich habe aber mit beiden probleme und weiss nicht, was ich machen soll, waere nett, wenn mir ihr helfen koenntet, am liebsten mit einem konkreten beispiel und dem code.
Danke vielmals

Steffen

Hi Steffen :smile:

An deiner Frage erkenne ich, dass du von C nun nicht mal den Hauch einer Ahnung hast. Um da rein zu kommen, kann ich dir das Standardwerk

Kernighan/Ritchie
Programmieren in C
2. Ausgabe, ANSI C
ISBN 3-446-15497-3 Buch anschauen

empfehlen. Ich könnte dir erklären, wie man einen String zurückgibt, aber du würdest es jetzt noch nicht verstehen …

cu Stefan.

Hmmmm…
ich sitze gerade in den staaten und habe keine zeit, kein geld und auch keine moeglichkeit das buch zu bestellen, gibt es das auch irgend wo im internet??
Ich habe noch kein einziges gutes tutorial im internet gefunden.
Beucher kaufe ich mir, wenn ich wieder zurueck in deutschland bin

Hallo,

ich habe das vor ein semester gelernt aber ich erinnere mich nicht gut daran.Trotzdem versuche ich dich zu helfen.
also wie du weisst eine funktion kann nur ein zeiger auf string
zurückgeben,du sollst ein zeiger auf dise string defenieren
char string[10];
char *p=string;
die funktion declaration soll so aussehen :
char * f(string);
und bei rückgabe
return p;
ich hoffe dass es dir hilft.
antwort mich wenn du es probierst hast.

Also, ein sehr gutes Buch ist der Eckel.
Ich kann dir nur empfehlen es zu kaufen. Auch für später noch gut zum nachschlagen!
http://airlab.elet.polimi.it/document/tic/tic_c.html

Meinst du es so?

Gruß Karsten

#include
string& thefunc(string& mystring)
{
mystring +=„Hallo Steffen“;
return mystring;
}

int main(int argc, char* argv[])
{
string test(„Karsten hilft! -“);

test = thefunc(test);
std::cout

Mist,
du wolltest C nicht C++.
Habe jede Menge Hilfe in meiner Datenbank.
http://obelix.et.bocholt.fh-elsenkirchen.de/~pleinka…

Viel Spaß
Karsten

char* thefunc(char* mystring)
{
char* att ="- Karsten Hilft!";
char* newstring = new char[strlen(mystring)+strlen(att)];
strcpy(newstring, mystring);
strcat(newstring, att);
return newstring;
}

int main(int argc, char* argv[])
{

char* mystring = „Hallo Stefen“;
mystring = thefunc(mystring);
cout

Muahhh, Karsten :smile:))

Mist,
du wolltest C nicht C++.

char\* thefunc(char\* mystring)
{
 char\* att ="- Karsten Hilft!";
 char\* newstring = new char[strlen(mystring)+strlen(att)];
 strcpy(newstring, mystring);
 strcat(newstring, att);
 return newstring;
}
int main(int argc, char\* argv[])
{
 char\* mystring = "Hallo Stefen";
 mystring = thefunc(mystring);
 cout 

Das ist immer noch C++ :smile:))

Außerdem ist dein mit dem C++-Operator **new** angelegter Speicherbereich um ein Byte zu klein (abschließendes Nullbyte) und wird nie wieder freigegeben ...

cu Stefan.

Hi Steffen,
erstmal find ich nicht gut, wie du Personen die dir helfen wollen, (im Fall vom ersten Artikel) anmachst. Zum zweiten
weist du recht viel dafür das du nichts weist!?!

Wie jetzt? Nun ich programmiere mehr C++ als C habe nun
aber alles so hoffe ich in C geschrieben. Und den Speicherfreigegeben. Also ich habs allerdings diesmal
nicht ausprobiert.
Gruß Karsten

char* thefunc(const char* mystring) /* besser ?*/
{
char* att ="- Karsten Hilft!";
char* newstring =

(char*) malloc(strlen(mystring)+strlen(att)+1);/* besser ? */

strcpy(newstring, mystring);
strcat(newstring, att);
return newstring;
}
int main(int argc, char* argv[])
{
char* mystring = „Hallo Stefen“;

char* mynewstring;/* besser ? */

mynewstring = thefunc(mystring);
printf("%s", mystring); /* besser ? */

free(mystring);/* besser ? */
free(mynewstring);/* besser ? */

}

Hi Steffen,
erstmal find ich nicht gut, wie du Personen die dir helfen
wollen, (im Fall vom ersten Artikel) anmachst. Zum zweiten
weist du recht viel dafür das du nichts weist!?!

Ich glaube, Du verwechselst Steffen und Stefan!

OK, jetzt aber zu dem Problem.
Hier ist schon ziemlich viel Falsches geschrieben worden, deshalb fange ich mal von vorne an.
Die Lösung mit malloc() geht zwar, ist aber ziemlich kompliziert. Wenn Du schon vorher weißt, wie lang der String höchstens werden kann, ist die einfachste (und übliche) Lösung, den Speicherplatz im aufrufenden Programm zu definieren. So wird es auch in der Standardbibliothek gemacht. Das geht dann so:

/* Aufzurufende Funktion */
void repchar(char *str, int n, char c)
{
int i;

/* fuelle den String mit n mal dem Zeichen c */
for (i=n-1,i>=0,i–)
*(str + i) = c;
*str+n=’\0’;
}

void main()
{
char buffer[30]; /* hier wird der Speicher reseviert */

repchar(buffer, 20, ‚!‘);

printf(buffer);
printf(’\n’);
}

Ausgabe:

!!!

Wichtig ist, daß der buffer im Hauptprogramm groß genug dimensioniert wird. Die Funktion verläßt sich dann darauf, daß der Zeiger buffer auf einen Speicherbereich zeigt, der reserviert und lang genug ist.

Gruß,

Marcus

Das stimmt so halb, aber nicht ganz. Siehe mein Posting weiter unten.

Sorry
Hallo,
ich hatte keine absicht irgend jemanden anzugehen oder belidigen, wenn dies der fall war, dann entschuldige ich mich hiermit. Mein deutsch ist nach 1 jahr nur englisch doch etwas den bach runter gegangen, und da kann so etwas auch passieren.
Danke vielmals noch

Steffen

Hi Karsten :smile:

Ich glaube, du meinst mich. Ich habe mein voriges Posting aber nicht böse gemeint. Ich hatte nicht die Absicht, dich irgendwie anzumachen. Ich fand es nur so lustig. Du machst einen Lösungsvorschlag. Dann fällt dir auf, dass der ja in C++ war. Dann machst du einen neuen Lösungsvorschlag, diesmal in C, der aber immer noch C++ war … Tut mir leid, wenn du dich dadurch angegriffen fühltest, das war wirklich nicht meine Absicht, und ich entschuldige mich auch hiermit dafür …

Viele Grüße

Stefan.