2010-12-20 19 views
2

文字列をwchar文字列に変換しようとしています。次のC++コードが最初の文字だけを印刷するのはなぜですか?

詳細:最初にchar []をwchar []に変換してから、その文字列に "1"を追加して印刷しようとしています。

char src[256] = "c:\\user"; 

wchar_t temp_src[256]; 
mbtowc(temp_src, src, 256); 

wchar_t path[256]; 

StringCbPrintf(path, 256, _T("%s 1"), temp_src); 
wcout << path; 

しかし、これはWCHARする文字から変換するための正しい方法ですちょうどc

を出力しますか?私は以来、別の方法を知るようになった。しかし、なぜ私は上記のコードは、それが動作する方法を知りたいですか?

答えて

10

mbtowcは、1文字のみを変換します。 mbstowcsを使用しましたか?

通常、この関数を2回呼び出します。必要なバッファサイズを取得する最初の、そして第二には、実際にそれを変換する:

#include <cstdlib> // for mbstowcs 

const char* mbs = "c:\\user"; 
size_t requiredSize = ::mbstowcs(NULL, mbs, 0); 
wchar_t* wcs = new wchar_t[requiredSize + 1]; 
if(::mbstowcs(wcs, mbs, requiredSize + 1) != (size_t)(-1)) 
{ 
    // Do what's needed with the wcs string 
} 
delete[] wcs; 

あなたはむしろmbstowcs_s(理由は非推奨の警告を)使用する場合は、この操作を行います。

#include <cstdlib> // also for mbstowcs_s 

const char* mbs = "c:\\user"; 
size_t requiredSize = 0; 
::mbstowcs_s(&requiredSize, NULL, 0, mbs, 0); 
wchar_t* wcs = new wchar_t[requiredSize + 1]; 
::mbstowcs_s(&requiredSize, wcs, requiredSize + 1, mbs, requiredSize); 
if(requiredSize != 0) 
{ 
    // Do what's needed with the wcs string 
} 
delete[] wcs; 

はあなたのことを確認してくださいsetlocale()経由で、またはロケール引数を取る(mbstowcs_l()またはmbstowcs_s_l()など)のバージョンを使用してロケールの問題を処理します。

+0

+1は - あまりにも壊れたリンクを修正:) –

+0

@Billy ONeal:感謝を。感謝します。 :-) –

+0

'delete [] wcs;' –

0

L「Hello World」

文字列の前の接頭辞Lは、ワイド文字列になります。

+0

True - しかし、OPの質問に本当に答えません.... –

+0

本当ですが、変換関数を呼び出す代わりに問題を自明にします。 – EnabrenTane

+0

実際には、char srcは私が制御できないものです。問題に言及しているはずです。だから私はそれの前にLを追加することはできません。それは私が渡されているいくつかのパラメータです。しかし私はコードを、私が物事を単純にするためにしたやり方で入れました。 –

2

なぜCコードを使用していますか?もっとポータブルな方法で書くのはいかがですか?たとえば、ここではSTLを使用します。

std::string src = std::string("C:\\user") + 
        std::string(" 1"); 
std::wstring dne = std::wstring(src.begin(), src.end()); 

wcout << dne; 

それはそれは簡単ですので、簡単です:D

+0

+1真実、あなたのコードももっとエレガントに見えます。しかし、私はCとC++(プロダクションコードではありません)の周りに自分のやり方を学んでいます。だから私は意図的に物事をだましている。動機は、物事の仕組みを理解することですが、単純にそれらをより良い方法でやり遂げることではありません:)感謝します。 –

関連する問題