私は今日、Windows マシンでは特定の文字列がかなり文字化けするが、Mac ではそうではない、プラットフォーム固有のバグに対処していました。std::string
このバグは、 と の間で明示的および暗黙的な変換を行ういくつかの行に関係していましたconst char *
。基本的に、署名付きの関数がありました
void foo(const std::string &id);
foo はある時点で文字列を出力します。Windows では、以下のように呼び出されると、さまざまなレベルの破損 (最初の数文字または文字列全体が文字化けする) で id 文字列が出力されます。
std::string mystring = bar();
const char *id = mystring.c_str();
foo(id); // pass the C style string in because I thought that's what it took
正しく呼び出すことでエラーを修正しましたfoo
:
std::string mystring = bar();
foo(mystring);
私はいくつかのことを理解することはできませんが、
- バグの原因は何ですか?
- なぜプラットフォーム固有だったのですか?
const char *
と の間の暗黙的な変換はstd::string
安全ですか?