2016-12-17 7 views
-2

Ich versuche, drei verschiedene const char * Variablen in einem anzuhängen. Dies liegt daran, dass eine Funktion aus der Windows-Bibliothek den Parameter LPCTSTR verwendet. Ich habe den folgenden Code:Wie man const char * an eine const Char * anfügt *

const char* path = "C:\\Users\\xxx\\Desktop\\"; 
const char* archivo = "vectors"; 
const char* extension = ".txt"; 

const char* fullPath =+ path; 
fullPath =+ archivo; 
fullPath =+ extension; 

Wenn ich es laufen erhalte ich nur die letzte (Erweiterung) hinzugefügt, um zu FullPath.

+0

Zeiger können nicht an Zeiger angehängt werden. – juanchopanza

+5

C-Style-Strings unterstützen keine Verkettung, und Sie wissen, was "const" bedeutet. Und was soll "= +" tun? Unterste Zeile, verwenden Sie std :: string. –

+1

'LPCTSTR' ist übrigens nicht gleichbedeutend mit' const char * '. Dies ist ein langer Zeiger auf ein konstantes TCHAR-Array. 'TCHAR' ist vorübergehend und kann entweder' char' oder 'wchar_t' bedeuten, je nachdem, wie Ihre Software eingerichtet ist. Wenn Sie eine Win32-Funktion verwenden, die ein 'LPCTSTR' verwendet, würde ich vorschlagen, dass Sie das nicht tun ... die Win32-API hat 'A'- und' W'-Varianten für alle String-Funktionen und jeden Code, der 'char * verwendet 'sollte die 'A'-Variante verwenden. –

Antwort

6

Sie müssen etwas Platz reservieren, um die verketteten Strings zu halten. Glücklicherweise hat C++ die Klasse std::string, um dies für Sie zu tun.

str::string fullPath = path; 
fullPath += archivo; 
fullPath += extension; 
const char *foo = fullPath.c_str(); 

Seien Sie sich bewusst, dass der Raum die verketteten Zeichenketten enthalten foo von fullPath und der Zeiger im Besitz ist nur dann gültig bleiben, solange fullPath in Umfang und unmodifizierten nach dem Aufruf von c_str.

+0

Da das OP nicht über Strings wusste (ich nehme an), könnte es sinnvoll sein, hinzuzufügen, dass der zurückgegebene Zeiger nur gültig ist, während FullPath im Bereich ist . – Shaggi

+0

Es wäre wirklich nicht wert hinzuzufügen, dass nichts mit der Frage zu tun hat. – Andy

0

Wenn Sie eine const char* verwenden, können Sie die Zeichen, auf die Sie zeigen, nicht ändern. Also const char* an eine const char* anhängen ist nicht möglich!

1

Wenn Sie zur Compile-Zeit ein Bündel von Stringliterale konstruieren wollen, von denen einige Verkettungen von anderen Stringliterale sind, die grundlegendste idiomatische wartungsarme Technik, die auf dem Vorprozessor guten alten Basis

#define PATH "C:\\Users\\xxx\\Desktop\\" 
#define NAME "vectors" 
#define EXT ".txt" 

const char *path = PATH; 
const char *archivo = NAME; 
const char *extension = EXT; 

const char *fullPath = PATH NAME EXT; 

Allerdings kann das gleiche Ding auf modernere Art erreicht werden, indem man einige constexpr und Vorlage Meta-Programmierung Magie verwendet (siehe C++ concat two `const char` string literals).

Andernfalls müssen Sie auf Run-Time-Verkettung zurückgreifen (wie std::string und so). Aber, wenn die Eingabe zur Kompilierzeit bekannt ist, dann ist eine Laufzeitlösung ein "Verlierer-Ausweg" :)

Verwandte Themen