2011-01-08 18 views
1

と言うと、wstringをconst char *に変換するのに適したテンプレート関数は何でしょうか?私のプログラムは完全にUnicodeで書かれていますが、SQliteはほとんどの関数にconst char *を必要とします。関数がwstringをconst char *に変換する機能をSQlite

msdnでこれを行う方法を見つけました。ここでは、http://msdn.microsoft.com/en-us/library/ms235631%28v=vs.80%29.aspxです(nameはwstringです)。 you4パラメータとしてUTF-16(すなわち、wstringの)を与えることができる

// Convert to a char* 
    size_t origsize = wcslen(name.c_str()) + 1; 
    const size_t newsize = 100; 
    size_t convertedChars = 0; 
    char nstring[newsize]; 
    wcstombs_s(&convertedChars, nstring, origsize, name.c_str(), _TRUNCATE); 

答えて

2

注* 16 SQLiteの機能を使用すべきである(例えばsqlite3_prepare16)。 Don_tは文字列の長さとして2 * wcslenを使用することを忘れてしまいます。あなたがconst char *関数を主張するなら、まずUTF-8に変換する必要があります。

+0

クロスプラットフォームアプリケーションを作成する場合、 'wchar_t'は必ずしもUTF-16コードユニットではないことに注意してください。もちろん、Windows上にあります。 – dan04

+0

なぜ文字列の長さに2を掛ける必要がありますか? – rem45acp

+1

wcslenはwchar_t文字数(2バイト)で長さを指定するため、sqliteは長さをバイト単位で指定します。 – hmuelner

関連する問題