2016-05-17 30 views
-1

文字列をLPTSTRに追加したい。文字列をLPTSTRに追加する

コードは次のとおりです。

hSourceFile = CreateFile(
    pszSourceFile, 
    FILE_READ_DATA, 
    FILE_SHARE_READ, 
    NULL, 
    OPEN_EXISTING, 
    FILE_ATTRIBUTE_NORMAL, 
    NULL); 
if (INVALID_HANDLE_VALUE != hSourceFile) 
{ 
    _tprintf(
     TEXT("The source plaintext file, %s, is open. \n"), 
     pszSourceFile); 
} 

pszSourceFileはLPTSTRのタイプですが、私はいくつかの余分なテキストを追加します。

と同様に(動作しない)

pszSourceFile + ".txt"

これを行うための最善の方法は何ですか?

+4

質問をご覧ください(http://stackoverflow.com/questions/308695/how-to-concatenate-const-literal-strings-in-c)。 Btw、WinAPIはCであり、C++ではありません。 – ckruczek

+1

なぜWindows 98をサポートする必要があると感じていますか? 21世紀に入り、Unicodeだけを使う方が良いのではないでしょうか。 'TCHAR'が依然として有用であると考えることに騙されてはいけません。 –

答えて

1

CスタイルとWindows API(TEXT()など)の使用を考慮してください。 _tcscat()または_tcsncat()を使用します(後でバッファサイズが必要です)。

たとえば、

TCHAR buffer[1024] = {}; // or '\0' 
_tcsncat(buffer, pszSourceFile, 1024); 
_tcsncat(buffer, TEXT(".txt"), 1024); 

Demo

警告;あなたのバッファオーバーランに注意してください。 「通常の」Windows 260の文字パスファイルと名前の制限(_MAX_PATH)を仮定すると、バッファはそれに対応する必要があります。

C++(もともとタグ付けされている)では、代わりにstd::basic_string<TCHAR>、次にoperator+(または+=)を通常通り使用します。 .c_str()は結果の文字列を取得します。

std::basic_string<TCHAR> buffer(pszSourceFile); 
buffer += TEXT(".txt"); 
auto ptr = buffer.c_str(); 
+0

あなたのコメントをありがとうが、私にエラーが表示されます: 'wcscat':この関数または変数が危険です。代わりにwcscat_sを使用することを検討してください。 –

+0

はい、Windowsにはより安全なバージョンがいくつか含まれています(MS特有の警告を無効にすることができます)。これらの選択肢も使用でき、正しくコンパイルして実行するには長さインジケータが必要です。 – Niall

+0

または_tcsncat – Niall

0

あなたの特定のユースケースは、「追加」シンプルではなく、挿入/フォーマットではありません。私は_stprintf_s推薦するので、それがstd::stringある場合ニールと同じラインに沿って、あなたは...もちろん

TCHAR output[SIZE] = {0}; 
_stprintf_s(output, _T("The %s directory"), pszSourceFile); 

が、それはまさにpszSourceFile何であるかに依存します(または_sntprintf_sMSDNを参照してください...)TCHARマクロを使用していますポインタを取得するにはc_str()メンバーを使用する必要があります。std::stringstd::wstringを使用する場合は注意が必要です。

関連する問題