std::string は std 名前空間のメンバーであるにもかかわらず、printf で使用しようとすると予期しない結果が発生します次のコード スニペットに見られるように、この動作は次のとおりです。
#include <iostream> #include <string> int main() { using namespace std; string myString = "Press ENTER to quit program!"; cout << "Come up and C++ me some time." << endl; printf("Follow this command: %s", myString); cin.get(); return 0; }
この問題は、printf がタイプセーフではなく、C スタイルの文字列に依存します。これを解決するには、いくつかの方法があります。
std::string は演算子のオーバーロードをサポートしているため、std::cout:
std::cout << "Follow this command: " << myString;
printf("Follow this command: %s", myString.c_str());
C 23 Update
C 23 では、両方のアプローチの長所を組み合わせた std::print が導入されており、 std::format: を使用したタイプセーフな出力以上が「printf」が「std::string」で予期せぬ動作を引き起こすのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。