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 😃


Anmelden zum Antworten