Veröffentlicht 25. März 200421 j 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!
25. März 200421 j 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
25. März 200421 j 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
25. März 200421 j 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
25. März 200421 j 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
25. März 200421 j 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?
25. März 200421 j 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
25. März 200421 j 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?
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.