[C]Verkettung von Strings innerhalb einer Funktion mit Hilfe von malloc

Einen wunderschönen guten Morgen,

und was machst du, wenn deine Strings unterschiedlich lang sind? Deine Funktion ist zur Zeit auf zwei gleich lange Strings beschränkt. Allerdings gibt es die Möglichkeit mittels strlen() die Länge einer Zeichenkette zu ermitteln. Die Summe beider Stringlängen +1 (Terminierungszeichen nicht vergessen) ist die Länge deines Ergebnisstrings. Das kannst du dann in deiner Zeile

C:
ergebnis = (char *)malloc((groesse * 2) * sizeof(char));

anstatt dem (groesse * 2) einsetzen.

Gruss
Mizi
 
Hi.
(!) PS: ich muss malloc casten in meinem Fall, da sonst mein Compiler folgenden Error meldet:
1>.\Zeichenverkettung mit malloc.cpp(30) : error C2440: '=' : cannot convert from 'void *' to 'char *'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Ich sagte ja auch, das das für C gilt. Du aber schreibst C Code in einer C++ Datei und kompilierst das ganze auch mit einem C++ Compiler. Das ist natürlich etwas unsinnig.

Gruß

PS: Außerdem ist es unnötig den ergebnis String vorher mit \0 zu füllen.
 
Einen wunderschönen guten Tag,

Hi.
PS: Außerdem ist es unnötig den ergebnis String vorher mit \0 zu füllen.

Dadurch wurde aber wenigsten sichergestellt, dass der String terminiert.

Die Funktion strcat() nimmt keine Stringterminierung vor. Lässt du also das (unsinnige) Füllen des Strings mit \0 weg, musst du auf jeden Fall am Ende noch das Terminierungszeichen anhängen.

Gruss
Mizi
 
Hallo zurück,

und was machst du, wenn deine Strings unterschiedlich lang sind? Deine Funktion ist zur Zeit auf zwei gleich lange Strings beschränkt.

Nein, es geht, hab es selbst ausprobiert. Auch wenn ich zwei Strings unterschiedlicher Länge habe, kann ich die Funktion benutzen.
Aber was mache ich eigentlich mit den Leerzeichen, wie kann ich beim kopieren zwischen einzelnen Wörtern ein Leerzeichen reinkriegen ohne dass ich es im String von schon vorgebe, wie ich das hier machen musste...
Code:
char * string1 = "Hallo ";			
char * string2 = "Welt! ";

LG
 
Nein, es geht, hab es selbst ausprobiert.
Da kannst du MiziMaze ruhig vertrauen. Dein Code ist falsch. Selbst wenn es testweise funktioniert heißt das bei C überhaupt nichts, da keine Prüfungen stattfinden und man meist mit kleinen Testdaten Glück hat das man da nichts wichtiges im Speicher überschreibt. Irgendwann bekommst du allerdings Abstürze.
Aber was mache ich eigentlich mit den Leerzeichen, wie kann ich beim kopieren zwischen einzelnen Wörtern ein Leerzeichen reinkriegen?
Du könntest z.B. die sprintf Funktion verwenden. Oder einfach weiter strcat und zwischen die Wörter eben noch ein Leerzeichen anfügen.

Gruß
 
Ahaaa :)
Naja, dann hab ich ja noch ein bisschen was zu tun, melde mich mal zurück wenn ich es fertig habe.

Auf jeden Fall erst mal danke.

Schönes WE wünsch ich euch!
 
So hallo zurück,

ich hab jetzt mal was ausprobiert, was scheinbar funktioniert und wollte mal zurückfragen ob das so geht?
Code:
// Zeichenverkettung mit malloc.cpp : main project file.

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <io.h>

#define MAX 15

char * verketten(char * string1, char * string2, char * ergebnis);
 
int main()
{	
	char * string1= "Hallo ";			
	char * string2= "Welt! ";
	char * ergebnis;

	printf("Dieses Programm verkettet 2 Strings miteinander!\n");
	printf("Vorher: \n%s\n%s\n", string1, string2);
	printf("Nachher: %s\n", verketten(string1, string2, ergebnis));
    getch();
	return 0;
}

char * verketten(char * string1, char * string2, char * ergebnis)
{	
	ergebnis = (char*)malloc((strlen(string1)+ strlen(string2)+1) * sizeof(char));
	

	(strcpy(ergebnis, string1));
	(strcat(ergebnis, string2));

	return ergebnis;
	}

LG
Bexx
 
Zurück