Master Z Geschrieben 25. März 2004 Geschrieben 25. März 2004 Hi leutz! Hab da wieder mal ein kleines Problemchen! Will versuchen einen String umzudrehen!Hier mal dier Quellcode!Ist nicht lang!!!!!! ---------------------------------------------------------------------------------------------------------- Die Main: #include<stdio.h> #include<stdlib.h> #include "reversstring.h" int main (void) { char string[5]="Jens"; char *pointer=string; //ZEIGER// reversstring(pointer); //puts(string); getchar(); } -------------------------------------------------------------------------------------------------------- Die Funktion: char reversstring(char *string) { int i,j=0; char tausche[5]=" "; for(i=5;i<=0;i--) { tausche[j] = *(string+(i)); j++; } *(string)=tausche; for(j=0;j<5;j++) { printf("%c",*(string+j)); } } --------------------------------------------------------------------------------------------------------- Vielleicht kann mir jemand den Fehler sagen!Ich komm einfach nicht drauf! Zitieren
-roTekuGeL- Geschrieben 25. März 2004 Geschrieben 25. März 2004 Original geschrieben von Master Z for(i=5;i<=0;i--) ehh kann ja sein dass ich falsch liege, aber er soll die if anweisung ausführen, solange wie i kleiner gleich 0 ist? demnach würde er die schleife nicht einmal betreten... CMIIW Zitieren
Master Z Geschrieben 25. März 2004 Autor Geschrieben 25. März 2004 Das war ja auch falsch du hast schon recht! Das ist das richtige: MAIN. ------------------------------------------------------------------------------------------------------ #include<stdio.h> #include<stdlib.h> #include "reversstring.h" int main (void) { int i; char string[]="JensAlbert"; char *pointer=string; //ZEIGER// puts(pointer); reversstring(pointer); getchar(); }----------------------------------------------------------------------------------------------------- Funktion: #include<string.h> char reversstring(char *string) { int x,i,j=0,a; char tausche[strlen(string)]; for(i=strlen(string);i>-1;i--) { printf("%s",string); printf("i=%d,j=%d\n\n",i,j); tausche[j]=*(string+i); j++; } for(a=0;a<=strlen(string);a++) { puts(tausche); printf("%d",a); } sO DER LA Zitieren
Master Z Geschrieben 25. März 2004 Autor Geschrieben 25. März 2004 Das war ja auch falsch du hast schon recht! Das ist das richtige: MAIN. ------------------------------------------------------------------------------------------------------ #include<stdio.h> #include<stdlib.h> #include "reversstring.h" int main (void) { int i; char string[]="JensAlbert"; char *pointer=string; //ZEIGER// puts(pointer); reversstring(pointer); getchar(); }----------------------------------------------------------------------------------------------------- Funktion: #include<string.h> char reversstring(char *string) { int x,i,j=0,a; char tausche[strlen(string)]; for(i=strlen(string);i>-1;i--) { printf("%s",string); printf("i=%d,j=%d\n\n",i,j); tausche[j]=*(string+i); j++; } for(a=0;a<=strlen(string);a++) { puts(tausche); printf("%d",a); } sO DER LA Zitieren
kLeiner_HobBes Geschrieben 25. März 2004 Geschrieben 25. März 2004 Hi! Also: 1. Wenn du schon reines C verwenden willst (so siehts jedenfalls aus), dann darfst du IMHO in der Funktion char tausche[] nicht mit einer nicht-konstanten Große initialisieren. 2. in der Rückwärtszählschleife muß i mit strlen(string) - 1 initialisiert werden. 3. und hier liegt wohl dann auch der Fehler: der getauschte String, also "tausche" muss am Ende mit \0 abgeschlossen werden. Im Mom schreibst du das \0 wohl eher an den Anfang (wegen Punkt 2) und am Ende ist gar keins mehr. 4. Ist mir deine Zeiger-Arithmetik etwas zu unstringent. Ich würde der Übersichtlichkeit halber nur den Index-Zugriff mit [] verwenden, oder, wenns sein muss, nur die Zeiger-Addition *(zeiger + x). Das mal die erste Analyse, getestet hab ichs net. Gruß Benjamin Zitieren
Master Z Geschrieben 25. März 2004 Autor Geschrieben 25. März 2004 Mal zu Punkt zwei warum muss ich -1 schreiben? Hab es mal getestet und so müsste es funktionieren! #include<string.h> char reversstring(char *string) { int x,i,j=0,a; char test[100]; //for(i=strlen(string)-1;i>-1;i--) for(i=strlen(string)-1;i>-2;i--) { test[j]=*(string+i); j++; } printf("%s",test); } Das mit i>-2 muss ich einfach schreiben sonst funzt es nicht weiß aber nicht warum vielleicht kannst du es mir ja erklären? Zitieren
kLeiner_HobBes Geschrieben 25. März 2004 Geschrieben 25. März 2004 Also Du hast in deinem String z.B. folgendes drinstehen: T e s t d a t e n \0 0 1 2 3 4 5 6 7 8 9 Das heißt, das strlen() 9 (also 0 bis 8 zählt) zurückgibt. Das \0 am ende wird nicht gezählt. Wenn du i also auf strlen setzen würdest, würde er beim Zeichen \0 anfangen, zu kopieren. Das willst du aber nicht, da das \0-Zeichen das String-Ende-Zeichen ist und du nachher nie was sehen würdest. Also setzt du i auf strlen()-1 also auf 8. Das heißt, das *(string + i) im ersten Durchlauf "n", den letzten Buchstaben zurückgibt. Jetzt lässt du die Schleife solange laufen, solange i >=0 ist (oder in deinen Worten: i > -1). Nach der Schleife hängst du noch ein Ende-Zeichen an test dran: test[j] = '\0'; Hier nochmal der komplette Code: char reversstring(char *string) { int i,j=0; char test[100]; for(i=strlen(string)-1;i>-1;i--) { test[j]=*(string+i); j++; } test[j] = '\0'; printf("%s",test); return NULL; } Ich hoffe, das hilft dir weiter... Benjamin Zitieren
Master Z Geschrieben 25. März 2004 Autor Geschrieben 25. März 2004 Danke für deine Hilfe!Du hast wirklich alles total super erklärt so das ich es verstanden habe!Wenn ich mal wieder ein Problem habe kann ich mich dann wieder an die wenden? Ich könnte ja denn direkt in dein PM schreiben oder? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.