char * übergeben
-
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