zwei wörter zusammen fügen in einer Variablene



  • Tach,
    aufgabe: Ich möchte die Werte zweier char Variablen zusammen in einer char Varablene schreiben.
    problem: allerdings bekomme ich immer probleme mit Zeigern oder der Arraygröße einer char Variablen

    wie funzt das den jetzt, ich bin total durcheinander.

    Gruß und danke im Vorraus



  • Okay, hier ist noch mal der Code, welcher aber noch nicht ganz fertig ist...es wird nur ein wort hinein geschrieben. Aber irgendwie hab ich das blöde gefühl das es noch viieeell einfacher geht...

    int zeichenzaehler(char *wort)
    {
    	int i = 1;
    	while(1)
    	{
    		if(wort[i]==0) break;
    		++i; 
    	}
    	return(i);
    }
    
    char *VWort(char *wort1, char *wort2)
    {
    	int anz = zeichenzaehler(wort1);
    	anz = anz + zeichenzaehler(wort2);
    	char *vkette;
    
    	while(1)
    	{
    		*vkette = *wort1;
    		if(*wort1==0) break;
    		++wort1;
    		++vkette;
    	}
    	return(vkette);
    }
    


  • Es gibt aber bereits ne Funktion dafür:

    strncat



  • Oder auch sprintf()

    char *vor = "Erster Teil";
    char *nach = "Zweiter Teil";
    char zusammen[100]; //sollte genügend groß sein!
    
    sprintf(zusammen, "%s - %s", vor, nach);
    


  • War Käse...



  • @CarstenJ
    Preisfrage: Was passiert mit new_string bzw. dem reservierten Speicher, wenn die Funktion string_append durchgelaufen ist?

    Außerdem was hat es für einen Sinn, wenn er eine Funktion selber schreiben soll und dann doch wiederum string-Funktionen verwendet?!



  • Tja, du hast recht, ist falsch.....



  • naja, es soll eine Funktion werden, wo es egal ist wie lang der array ist...
    also

    char zusammen[100];
    

    sollte "dynamisch" sein.



  • char *zusammen;

    zusammen=malloc(strlen(vor) + strlen(nach) + 1);



  • Okay, danke für die Hilfe habs jetzt fertig 😃

    char *VWort(char *wort1, char *wort2)
    {
    	char *zusammen;
    	zusammen = (char *)malloc(strlen(wort1) + strlen(wort2) + 1);
    	strcpy(zusammen,wort1);
    	strcat(zusammen,wort2);
        return(zusammen);
    }
    


  • Naja, da gibts noch ein Problem auf das ich CarstenJ schon hingewiesen hatte.

    Wenn du eine lokale Variable hast, dann ist diese nur innterhalb des Bereichs (hier Funktion) gültig. Außerdem hast du so eine Speicherleiche. Der reservierte Speicher für zusammen wird erst zum Programmende wieder freigegeben und um so öffter du deine Funktion aufrufst, um so mehr Speicher wird reserviert sein.

    Mein Vorschlag:

    char *VWort(char *ziel, const char *vor, const char *nach)
    {
       sprintf(ziel, "%s%s", vor, nach);
    
       return(ziel);
    }
    
    //Aufruf
    char *wort1 = "Erster Teil ";
    char *wort2 = "und zweiter Teil";
    char *zusammen;
    
    zusammen = malloc(strlen(wort1) + strlen(wort2) + 1); //reserviert genügend Speicher
    
    VWort(zusammen, wort1, wort2); //fügt strings zusammen
    
    printf("%s", zusammen); //Ausgabe
    
    ... //Sonstiges
    
    free(zusammen); //gibt reservierten Speicher wieder frei für zusammen
    

Anmelden zum Antworten