printf 與std::string 的錯誤處理
嘗試使用printf 與std::string 時,可能會因類型而發生錯誤預期的C 風格字串與提供的std::string 不符。
這是因為 printf 需要一個以 null 結尾的字串C 風格的字串,而 std::string 不提供這樣的直接表示。要解決此問題,請考慮以下解決方案:
使用std::cout
由於std::string 支援運算子重載以插入流,因此最簡單的解決方案是使用std::cout 進行列印:
std::cout << "Follow this command: " << myString;
提取 C風格String
如果您特別需要C 風格字串,請使用std::string:
printf("Follow this command: %s", myString.c_str());
可變參數模板< 的c_str( ) 方法🎜>
對於printf 的型別安全替代方案,請考慮使用可變參數模板,如中提供的範例所示答案:// Variadic function template<typename T, typename... Ts> void myPrintf(const char* format, T firstArg, Ts... otherArgs) { // Handle variable arguments // ... } // Usage myPrintf("Follow this command: %s", myString);
其他注意事項
請注意,printf 不是類型安全的,並且依賴您提供準確的類型信息。如果您提供的類型資訊不正確,則函數可能會表現出未定義的行為。 隨著 C 23 標準的出現,std::print 已成為利用 std::format 進行直接輸出的一種方式,結合了兩者的優點printf 和 std::cout。以上是如何在 C 中正確使用 `printf` 和 `std::string` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!