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);
クロスプラットフォームアプリケーションを作成する場合、 'wchar_t'は必ずしもUTF-16コードユニットではないことに注意してください。もちろん、Windows上にあります。 – dan04
なぜ文字列の長さに2を掛ける必要がありますか? – rem45acp
wcslenはwchar_t文字数(2バイト)で長さを指定するため、sqliteは長さをバイト単位で指定します。 – hmuelner