Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » strcat

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
24.06.2003, 11:53 Uhr
~kronos
Gast


hi!
sorry für noob-frage, aber ich bin nunmal einer und suche hat leider nichts ergeben...

gibt es eine einfache möglichkeit
strcat(str1,str2);
anzuwenden und danach auf die originalstrings zuzugreifen, ohne den return-str1 mit memcopy o.a. auseinanderzuschnibbeln?
(sie liegen im speicher direkt hintereinander, str2 wird also teilweise überschrieben...)

vielen dank für antworten!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.06.2003, 12:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du kannst noch sprintf verwenden um dir einen neuen string zusammenzubasteln


C++:
char str1[]="hello ";
char str2[]="world";

char *mystring = new char[strlen(str1)+strlen(str2)+1];
sprintf(mystring,"%s%s",str1,str2);



Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.06.2003, 12:40 Uhr
ao

(Operator)



Zitat:
~kronos postete
strcat(str1,str2);
...
(sie liegen im speicher direkt hintereinander, str2 wird also teilweise überschrieben...)


Du weißt, daß das äußerst unfein ist, ja? Im Klartext, das Ergebnis von strcat ist undefiniert, wenn die Speicherbereiche überlappen. Eine eventuelle Aussage "bei mir klappts aber" ist völlig wertlos, denn morgen beim Kunden kann dasselbe Programm gnadenlos abstürzen. Nicht machen! str1 muß groß genug sein, um beide Strings aufzunehmen, also mindestens strlen(str1) + strlen (str2) + 1.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.06.2003, 15:31 Uhr
~kronos
Gast


ups, ich hätte erwähnen sollen, dass ich mit C arbeite...
aber des rätsels lösung war die selbe, nämlich die feste größe, also vielen dank!!!
btw:
char *mystring = new char[strlen(str1)+strlen(str2)+1];
hätte doch auch einfach
char mystring[strlen(str1)+strlen(str2)+1];
geschrieben werden können oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.06.2003, 11:29 Uhr
~bbb
Gast


nee, muss dynamisch(mit new) sein, weil die Grösse des Strings zur Compilierzeilt noch nicht feststeht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.06.2003, 12:05 Uhr
~0xdeadbeef
Gast


Wenn du new benutzt, ist es aber kein C. Und wenn du so oder so C++ benutzt, kannst du auch die einfache Variante nehmen:

C++:
#include <string>

using namespace std;

//...

string str1 = "Hello, ";
string str2 = "World!";
string mystring = str1 + str2;


Dieser Post wurde am 25.06.2003 um 12:08 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.06.2003, 14:22 Uhr
~0xdeadbeef
Gast


Und wenn dus in C machen willst:

C++:
#include <stdlib>

char *str1 = "Hello, ";
char *str2 = "World!";
char *mystring;

mystring = (char*) malloc(strlen(str1) + strlen(str2) + 1);
sprintf(mystring, "%s%s", str1, str2);

free(mystring); /*Speicher freigeben nicht vergessen*/

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.06.2003, 21:07 Uhr
~kronos
Gast


ok, mein problem ist gelöst, aber ich frag' euch einfach trotzdem noch ein paar löcher in den bauch :

Zitat:
mystring = (char*) malloc(strlen(str1) + strlen(str2) + 1);

wozu (char*)?? mystring doch selbst, dass es ein charpointer ist...?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.06.2003, 22:02 Uhr
Hans
Library Walker
(Operator)



Zitat:
~kronos postete
ok, mein problem ist gelöst, aber ich frag' euch einfach trotzdem noch ein paar löcher in den bauch :
Macht nicht's! Dafür ist dies Forum ja da.

Zitat:
[quote]mystring = (char*) malloc(strlen(str1) + strlen(str2) + 1);
wozu (char*)?? mystring doch selbst, dass es ein charpointer ist...?[/quote] Damit der Compiler auch wirklich sicher sein kann, dass der Zeiger, den malloc() liefert, auf ein character-Array verweist, und nicht auf einen anderen Typ. (Und um einen möglicherweise falschen impliziten Typecast auszuschliessen.) - Jedenfalls verstehe ich das so. Hat noch jemand eine bessere Erklärung?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
25.06.2003, 22:07 Uhr
ao

(Operator)



Zitat:
~kronos postete
wozu (char*)?? mystring doch selbst, dass es ein charpointer ist...?

Das ist richtig, aber der Rückgabewert von malloc () ist vom Typ (void*).

In C ist der explizite Typecast überflüssig, weil der Compiler die Umwandlung von (void*) in jeden anderen Zeigertyp implizit vornimmt.

In C++ stellt das einen Fehler dar; es muss explizit gecastet werden.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: