char * übergeben
-
Was genau klappt denn nicht? Wird tt nicht durch ll ersetzt?
-
Nein, das Programm lässt sich so gar nicht ausführen.
Es kommt immer dann die Meldung: Der vorgang written konnte nicht auf dem Speicher durchgeführt werden. Wenn ich aber einen "normalen" String eingebe, dann wird auch tt durch ll ersetzt. Wenn ich z.B. "Hallo" mit übergebe, dann erhalte ich Hatto. Aber wenn ich meinen Inputstring input mit übergebe stürzt das Programm ab (beim Ausführen)
-
Dann liegt es eindeutig an deiner Funktion ersetzen(). Zeig mal den Quellcode davon.
-
char* ersetzen(char *such, char *neu, char *inp) { int len_re = 0; int len_repl = 0; int len_in = 0; int len_new = 0; char new_string[100] = {0}; char *pdest; int pos = 0; len_re = strlen(such); len_repl = strlen(neu); if(len_re) { pdest = strstr(inp, such); while(pdest) { memset(new_string, 0, strlen(new_string)); pos = pdest - inp + 1; len_in = strlen(inp); if(pos == 1) { strcpy(new_string, neu); inp = inp + len_re; strcat(new_string, inp); inp = inp - len_re; } else { strncpy(new_string, inp, pos - 1); strcat(new_string, neu); if(pos + len_re - 1 != len_in) { inp = inp + pos + len_re - 1; strcat(new_string, inp); inp = inp - pos - len_re + 1; } } len_new = len_in - len_re + len_repl; inp = (char*)malloc(len_new); memset(inp, 0, sizeof(len_new)); strcpy(inp, new_string); pdest = strstr(inp, such); } } return inp; }
Hoffe du findest den Fehler...
-
Ich glaube, ich weiß woran es liegt. Bei strn... muss man aufpassen. In der Doku steht normalerweise immer dabei, dass strn... KEIN \0 an den Schluss dranhängt sobald die n Zeichen erreicht wurden. Also musst du nach dem strncpy() noch das Stringendezeichen an der richtigen Stelle machen (die Position hast du ja ;)).
Mit ein bisschen Debuggen würdest du wahrscheinlich auch draufkommen ;).
-
und wie hängt man an den InputString noch ein '\0' ran???
-
Tom_Novy schrieb:
und wie hängt man an den InputString noch ein '\0' ran???
new_string[pos-1] = 0;
Ganz simpel.
Die Länge, die du angibst bei strncpy() ist auch der Index an dem die 0 zumindest stehen muss. Wird beim kopierenden String die 0 vor der maximalen Länge gelesen, dann wird es auch übertragen (nur so nebenbei).
PS:
Mir ist grad noch aufgefallen, dass du ja eigentlich eh alles mit 0 initialisierst. Also dürfte es da gar auflaufen. Trotzdem ist diese Methode noch etwas sicherer ;). Schmeiß am besten mal deinen Debugger (dein bester Freund :)) an, um den Fehler besser einzugrenzen. Das malloc() in deiner Funktion gefällt mir persönlich auch nicht besonders.
-
Ich bin heute vielleicht etwas doof, aber an welche Stelle würdest du das denn hinschreiben, damit es funktioniert? Ich habe schon 3 Stellen versucht und nichts klappt. Sorry.
-
Siehe PS:
-
Mist... Ich kriegs nicht hin...
-
Hast du es schon mit dem Debugger versucht? (Ich werde weiterhin drauf pochen ;))
Oder hast du keinen? Damit könntest du zumindest schon mal feststellen an welcher Stelle im Programm der Abbruch ist.
-
AJ, Ich danke dir für deine Geduld mit mir...
Habe den Fehler mit Hilfe des Debuggers gefunden...
Ist ganz einfach gewesen(eigentlich).
Und zwar war nur mein new_string[100] viel zu klein... So eine Kacke, dass ich das jetzt erst bemerkt habe. Aber jetzt funzt es... Danke
-
Gern geschehen.
Ich sag ja: Der Debugger, dein bester Freund