2009-05-08 13 views
2

私はwcscat()を試しましたが、私はランタイムアクセス違反を取得します。wchar_tを別のものに追加する手助けが必要です! C++

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t* c; 
c = wcscat(a, b); 

ここで何が間違っているか教えていただけますか?私の問題を解決する別の方法ですか?おかげ

+3

C++を使用している場合は追加するだけですが、これはやり方が間違っています。 C++標準ライブラリには、C文字列の難しさのために文字列オブジェクトがあります。 – rlbond

答えて

5

wcscatは、新しい文字列を作成しません。単にbaに追加します。したがって、ランタイムアクセス違反が発生しないようにしたい場合は、の末尾にbのスペースがあることを確認する必要があります。上記の場合:

wchar_t a[7] = L"aaa"; 
wchar_t b[] = L"bbb"; 
wchar_t* c; 
c = wcscat(a, b); 

あなたはまだ関数からの戻り値を取得することができますが、それは単にaを返します。

3

使用するC++のwstringの中に組み込まれて:

#include <string> 
using std::wstring; 

int main() 
{ 
    wstring a = L"aaa"; 
    wstring b = L"bbb"; 
    wstring c = a + b; 
} 

wcscatはCスタイルの文字列ではなく、C++スタイルの文字列です。これを行うには、Cの方法は

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t c[7]; 
wcscpy(c, a); 
wcscat(c, b); 

EDITです:うわー、今私はそれを編集していること、それは私が下記の答えの1コピーのように見えます。

+0

これは正しい解決策であったに違いない! :) –

1

wcscatファンクションは、第2引数を第1引数の文字列バッファに追加します。 Cでの文字列を使用して、初めての経験かもしれませんがあなたが実行してあなたの例の作品を作ることができるようになります次:

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t c[7]; 
wcscpy(c, a); 
wcscat(c, b); 

C文字列操作関数を使用して、あなたはあなたのために十分なバッファ領域を割り当てることを確認する必要があります文字列操作が実行されます(Cランタイムはそれを行いません)。この場合、結果の文字列を保持するのに十分な空き領域がバッファに含まれている必要があります。私は結果が6文字の長さと最後のヌルの合計であることを事前に計算しました。つまり、7文字を割り当てる必要があります。