2016-12-17 255 views
-2

我想将三个不同的const char *变量追加到一个中。这是因为Windows库中的函数采用参数LPCTSTR。 我有以下代码:如何将const char *附加到const char *

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

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

当我运行它,我只得到了最后一个(扩展)加入到FULLPATH。

+0

指针不能附加到指针。 – juanchopanza

+5

C风格的字符串不支持连接,并且您确实知道'const'是什么意思? '= +'应该做什么?底线,使用std :: string。 –

+1

顺便说一句,'LPCTSTR'与'const char *'不同义。这是一个指向恒定“TCHAR”数组的长指针。 'TCHAR'是暂时的,可以是'char'或'wchar_t',这取决于你的软件是如何设置的。如果您使用的Win32函数采用'LPCTSTR',我建议您不要这样做...... Win32 API对于所有字符串函数和任何使用char *的函数都有'A'和'W'变体, '应该使用'A'变体。 –

回答

6

您需要分配一些空间来容纳连接的字符串。幸运的是,C++有std::string类来为你做这件事。

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

注意,包含串联字符串的空间被fullPath拥有和指针foo只会调用c_str后仍然有效,只要fullPath是在范围和修改。

+0

因为OP不知道字符串(我想),添加返回的指针只有在fullPath在作用域时才有效。 – Shaggi

+0

加上这个问题真的没有价值,与问题无关。 – Andy

0

当您使用const char*时,您不能更改指向的字符。 所以追加const char*const char*是不可能的!

1

如果你想在编译时一串字符串文字,其中有一些是其他字符串常量的级联来构造,最基本的惯用低维护的技术是基于良好的老预处理

#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; 

但是,通过使用一些constexpr和模板元编程魔术(请参阅C++ concat two `const char` string literals),可以更模式地实现同样的目的。

否则,您将不得不求助于运行时级联(如std::string等)。但是,如果输入在编译时已知,那么运行时解决方案就是“失败者的出路”:) :)