Text umkehren was mach ich falsch
-
Eine kleine Frage ich soll eine Funktion machen die einen Text/Wort umkehrt und den per Pointer an main() uebergibt welches dann das Ergebniss ausgibt. Jetzt hab ich das Problem das statt der Ausgabe des umgekehrten Textes ein Buchstaben und ein Doppelpfeil(einer der nach oben und unten zeigt) rauskommt. Kann mir jemand sagen was ich da falsch mache
#include <stdio.h> #include <string.h> #include <stdlib.h> void umkehren(char *normaltext,char *umgekehrtertext){ char tmp[64]; normaltext = tmp; //schrieb zuerst tmp = normaltext doch der Compiler sagte das ich es verkehrt geschrieben hätte strrev(tmp); umgekehrtertext = tmp; //hier das selbe wie beim oberen Kommentar } int main(){ char normaltext[64]="Hallo"; char umgekehrtertext[64]; umkehren(normaltext,umgekehrtertext); printf("VORHER: %s, NACHHER: %s",normaltext,umgekehrtertext); getchar(); return 0; }
Compilliert wurde das ganze im Borland 5
-
schau dir das hier mal an: http://man.he.net/man3/strcpy
ndT Lupo
Denn früh belehrt ihn die Erfahrung: Sobald er schrie, bekam er Nahrung.
^Wilhelm Busch^
-
achja hab ich ganz vergessen was noch zu erwähnen wäre die aufgabe muss ohne returnwert gelöst werden.
-
ja ist doch völlig egal... bei dem Link ging es nur um die Art, wie du deinen Text kopierst!
Das ist nämlich falsch, so wie du das z.Zt. machst.
Danach kannst du dir gedanken über die rückgabe ohne return machen.ndT Lupo
Frei ist der Mensch, der ohne Begründung eine Einladung ablehnen kann.
Oder: wer ohne zu kränken sagen kann, ich habe keine Lust.
^Johannes Gross^
-
Kannst Du mir mal sagen wo strrev dokumentiert ist?
void umkehren (char **szReverse, const char *szIn) { int iStrLength, iLoop = 0; /*Add here check against NULL-Pointers*/ iStrLenght = strlen (szIn); *szReverse = (char *) calloc (sizeof (char), iStrLength + 1); /*Add here check that heap has been really allocated*/ while (iLoop < iStrLength) { *szReverse [iLoop] = szIn [iStrLength - iLoop]; iLoop++; } }
Ich wuerde jedoch den Wert zurueckgeben:
char * umkehren (const char *szIn) { int iStrLength, iLoop = 0; char *pReturn = NULL; if (szIn == NULL) return NULL; iStrLenght = strlen (szIn); pReturn = (char *) calloc (sizeof (char), iStrLength + 1); if (pReturn == NULL) return pReturn; while (iLoop < iStrLength) { pReturn [iLoop] = szIn [iStrLength - iLoop]; iLoop++; } return pReturn; }
-
char *rev(char *s) { if (!*s) return 0; char *e=s,*b=s,t; while (*++e); --e; while (b<e) { t=*b; *b++=*e; *e--=t; // (*e)^=(*b)^=(*e--)^=(*b++); }; return s; };
-
Is schon schön wie alle heute lesen können
"Ohne Returnwert" heißt "ohne Returnwert" und nicht "wie gebe ich am kryptischten einen char* zurück"!
@n()()b
Folge dem link von Lupo4u2 und du wirst erfolg haben.
-
vom prinzip her richtig, jedoch müsste man bei dem letzten beispiel nicht mal s returnen, da man eh auf einer referenz arbeitet, wodurch es sich am direkten string auch ändert
-
Danke für die Vielen Ratschläge jetzt wo ich ein paar Meinungen gehört habe kann ich ja mal anfangen mit ausprobieren. Irr ich mich oder hab ich zudem noch ein Pointerfehler drin?
-
n()()b schrieb:
Irr ich mich oder hab ich zudem noch ein Pointerfehler drin?
ja.
da das pointer-erklären immer haarig ist, poste lieber ich mal wie es richtig aussehen muß:
void umkehren(char *normaltext,char *umgekehrtertext){ strcpy(umgekehrtertext,normaltext); strrev(umgekehrtertext); } int main(){ char normaltext[]="Hallo"; char umgekehrtertext[64]; umkehren(normaltext,umgekehrtertext); printf("VORHER: %s, NACHHER: %s",normaltext,umgekehrtertext); getchar(); return 0; }
PS: was ist strrev()