2016-12-17 7 views
-2

3つの異なるconst char *変数を1つに追加しようとしています。これは、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; 

私はそれを実行すると、私は唯一の最後(拡張子)を取得するには、フルパスにに加えます。

+0

ポインタをポインタに追加することはできません。 – juanchopanza

+5

Cスタイルの文字列は連結をサポートしておらず、 'const'の意味を知っていますか?そして、 '+ +'は何をやろうとしていますか?一番下の行はstd :: stringを使います。 –

+1

'LPCTSTR'は' const char * 'と同義ではありません。これは、定数 'TCHAR'配列への長いポインタです。 'TCHAR'は一時的なもので、ソフトウェアの設定に応じて' char'または 'wchar_t'を意味します。 'LPCTSTR'をとるWin32関数を使用している場合は、そうしないことをお勧めします... Win32 APIには、すべての文字列関数と' char * 'は' A'変種を使うべきです。 –

答えて

6

連結された文字列を保持するスペースを割り当てる必要があります。幸いにも、C++にはstd::stringクラスがあります。

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

連結文字列を含む空間をfullPathによって所有され、ポインタfooのみ限りfullPathc_strを呼び出した後の範囲および未修飾であるとして、有効なままであることに注意してください。

+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など)に頼らざるを得なくなります。しかし、コンパイル時に入力がわかっている場合、実行時の解決策は「敗者の退出」です。

関連する問題