カスタム文字列クラスを表す独自のクラスがあります。私はVS2012RCを使用しています。クラス CustomString のいくつかの演算子をオーバーロードしました。
ここにいくつかのコードがあります:
CustomString::CustomString(string setstr)
{
str = setstr;
}
CustomString::operator const char *()
{
return (this->str.c_str());
}
CustomString &CustomString::operator = (char *setstr)
{
str = setstr;
return *this;
}
オブジェクトを定義して、次のように使用できます。
CustomString str = "Test string";
結果を次のように印刷できます。
printf(str);
printf((string)(str).c_str());
printf((string)(str).data());
printf("%s\n",(string)(str).c_str());
printf("%s\n",(string)(str).data());
そして、エラーはありません。
しかし、私がこのように使用すると:
printf("%s\n", str);
msvcr110d.dll に例外あり(メモリアクセスエラー)
printf(str)は問題ないのに、printf("%s\n",str)は問題ないのはなぜですか?
printf("%s\n",str)を使用するようにコードを変更するにはどうすればよいですか?
...
何時間ものグーグル検索の後、明示的なキャスト (string)、static_cast (str)、および _str() メソッドが null で終わる文字を追加していることがわかりました: '\0';
コードを次のように変更しました。
printf("%s\n",str + '\0');
そしてそれはうまくいきました!
カスタム コンストラクターを変更して null で終わる文字列を追加し、null で終わる文字で正しい値を渡して、次のコードを機能させる方法はありますか。
printf("%s\n",str);