如何使用std::print输出std::wstring?
如何使用std::print输出std::wstring?
嘿,我来帮你搞定这个问题~你尝试的代码之所以会报错,核心原因是std::print默认绑定的是窄字符输出流std::cout,它没办法直接处理宽字符类型的std::wstring,类型不匹配自然就报错啦。
给你两个实用的解决办法,你可以根据自己的场景选:
办法一:指定宽字符输出流来打印
直接在std::print的第一个参数位置传入宽字符输出流std::wcout,这样就能和宽字符串的类型匹配上了,修改后的代码是这样的:#include <print> #include <string> #include <iostream> int main() { std::wstring s = L"something"; std::print(std::wcout, L"{}", s); }办法二:把宽字符串转成窄字符串(适合内容是ASCII的场景)
如果你的宽字符串里都是ASCII范围内的字符,也可以把它转换成普通的std::string再打印,不过要注意编码转换的问题,避免出现乱码:#include <print> #include <string> #include <locale> #include <codecvt> int main() { std::wstring s = L"something"; // 宽字符串转窄字符串的工具 std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; std::string narrow_str = converter.to_bytes(s); std::print("{}", narrow_str); }这里要提个醒:
std::codecvt在C17里已经被标记为弃用了,如果你用的是比较新的C标准,建议用<charconv>里的工具或者成熟的第三方编码库来做转换,会更稳妥。
另外还要注意,std::print是C23才引入的特性,你得确保编译器开启了C23的编译选项(比如Clang要加-std=c++23),不然也会出现编译错误哦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

