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

Bexx

Verrückte Erfinderin bei Daniel Düsentrieb
Hallo,

brauche einen kleinen Denkanstoß... Will die im Quelltext angegeben Strings in der Funktion miteinander verbin, aber es klappt hinten und vorne nicht.
Fehlermeldung des Compilers :
"
1>.\Zeichenverkettung mit malloc.cpp(31) : error C2440: '=' : cannot convert from 'int' to 'char **'"

Aber ich verstehe nicht wo er den int sieht...

Wie kann ich diese Sache lösen, ohne den halben Quelltext zu ändern?

Danke im Voraus....


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(MAX * sizeof(char));
	ergebnis = *string1 + *string2;
	
	return ergebnis;
}
 
Hi.

Das funtioniert so nicht. Du kannst C-Strings nicht einfach addieren. Schau dir die strcat Funktion (und die strcpy Funktion) an.

Beachte, dass du den Speicher den du in der verketten Funktion allozierst, dann nachher wieder mit free() freigeben mußt.

Gruß
 
Hallo,

genau dort, wo es die Fehlermeldung anzeigt - Zeile 31 ! ! ! :eek:

ergebnis = (char *)malloc(MAX * sizeof(char));

MAX ist bei Dir 15 - und 15 * 1 bleiben 15 !
Und diesen Integerwert versuchst Du nach CHAR* zu casten - wozu auch immer ....
Was Du da versuchst, kann auch nicht en!

Ich würde eh' auf "malloc and friends" tunlichst verzichten!

Versuche es mal so (ungetestet ) :
Code:
char *cErgebnis = new char[MAX];

int iLen1 = string1.length();
int iLen2 = string2.length();

memcpy( cErgebnis, string1.data(), iLen1 );
memcpy( cErgebnis[iLen1], string2.data(), iLen2 );

.....

// nicht vergessen, sonst gibt es Speicherlecks!
delete[] cErgebnis;

Gruß
Klaus


[EDIT] oop - zu spät ... :-(
 
Hi.
genau dort, wo es die Fehlermeldung anzeigt - Zeile 31 ! ! ! :eek:



MAX ist bei Dir 15 - und 15 * 1 bleiben 15 !
Und diesen Integerwert versuchst Du nach CHAR* zu casten - wozu auch immer ....
Du hast den Funktionsaufruf wohl übersehen?! Da muß man einen int übergeben. Das Ergebnis von malloc sollte allerdings in C nicht gecastet werden!

Was Du da versuchst, kann auch nicht en!

Ich würde eh' auf "malloc and friends" tunlichst verzichten!
Es handelt sich um C.

Gruß
 
Hallo,

ach so, ja klar!

Nun ich hab's vlt. etwas unklar ausgedrückt. Wollte nur darauf hinweisen, WO der Integer steckt nach dem gefragt wurde - und dass das anschließende casten ziemlicher Trött ist .... :rolleyes:

Gruß
Klaus
 
Hm auch da ist die Fehlermeldung recht merkwürdig. Es sei denn er versucht aus dem Ergebnis der Addition des 1. Zeichens der beiden Strings (d.h. char* dereferenzieren bleibt char) ne Zeigeradresse zu machen ^^
 
Hallo und guten Morgen,

es hat mir ja keine Ruhe mehr gelassen und hab dann gestern die ganze Zeit noch am Code rumgedoktort und es dann auch endlich geschafft, das Programm fehlerfrei zum laufen zu kriegen. Hier der neue Quelltext:

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 groesse);
 
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, MAX));

    getch();
	return 0;
}

char * verketten(char * string1, char * string2, char * ergebnis, int groesse)
{	
	ergebnis = (char *)malloc((groesse * 2) * sizeof(char));
	groesse*= 2;

	for (int i = 0; i < groesse; i++)
	{
		ergebnis[i] = '\0';
	}
	(strcpy(ergebnis, string1));
	(strcat(ergebnis, string2));

		
	return ergebnis;
}

(!) 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


Auf jeden Fall dickes Dankeschön für die schnelle Hilfe...
 
Zurück