char*, char[] > strcopy + strcat > mit \0

11/11/2013 - 14:21 von Heinz-Mario Frühbeis | Report spam
Hallo zusammen,

ich bràuchte ein char*-Member, das mit "\0" beginnt, aber es muss zur
Laufzeit erstellt werden und da habe ich

vProjekt->SockPath = new char[10 + vProjekt->Ident.length()];
strcpy(vProjekt->SockPath, "\0IDASocket");
//strcat(vProjekt->SockPath, "IDASocket");
strcat(vProjekt->SockPath, vProjekt->Ident.c_str()); // IDENT z.
Bsp. "94773662228884"
Std_CoutA("SOCKETPATH", vProjekt->SockPath,
strlen(vProjekt->SockPath)); // Ist 'ne eigene cout-Funktion

benutzt[1].

Die Ausgabe ist aber nur "SOCKETPATH 94773662228884 14".
Es fehlt also "IDASocket".

Dann habe ich

vProjekt->SockPath = new char[10 + vProjekt->Ident.length()];
strcpy(vProjekt->SockPath, "\0");
strcat(vProjekt->SockPath, "IDASocket");
strcat(vProjekt->SockPath, vProjekt->Ident.c_str());
Std_CoutA("SOCKETPATH", vProjekt->SockPath,
strlen(vProjekt->SockPath));

benutzt[2].
Also zuerst "\0".
Und dann ist die Ausgabe "SOCKETPATH IDASocket94773662228884 23".

Wieso ist bei [1] die Ausgabe _ohne "IDASocket"?
Und, habe ich denn jetzt bei [2] das Null-Byte drin, oder nicht?
Wenn nicht, wie kriegt man denn ein char* zur Laufzeit hin, das mit "\0"
beginnt?

Vorab mit Dank und mit Gruß
H-MF
 

Lesen sie die antworten

#1 Martin Schoenbeck
11/11/2013 - 15:36 | Warnen spam
Hallo Heinz-Mario,

Heinz-Mario Frühbeis schrieb:

Wieso ist bei [1] die Ausgabe _ohne "IDASocket"?
Und, habe ich denn jetzt bei [2] das Null-Byte drin, oder nicht?
Wenn nicht, wie kriegt man denn ein char* zur Laufzeit hin, das mit "\0"
beginnt?



Da schaust Du einfach mal nach, was strcat macht: Es sucht nach dem Ende
des Strings (also der \0) und hàngt dann da den übergebenen String an.
Klar, daß das im ersten Fall Dein IDASocket überbügelt. Und klar, daß es
das im zweiten nicht tut.

Warst Du das nicht, der meinte, daß die Programmierer von Thunderbird
ziemlich unfàhig seien, weil der immer noch Fehler hat? Ist vielleicht doch
nicht ganz so banal, wie Du dachtest.

Gruß Martin
Bitte nicht an der E-Mail-Adresse fummeln, die paßt so.

Ähnliche fragen