std::string_view 是 C++17 新加的一個類,是字符串的無全部權引用。對 std::string_view 的操做都不會生成新字符串(好比 substr),而是返回一個新的 string_view 可是引用原字符串。c++
這樣效率是有提高,可是帶來一個問題就是:std::string_view 沒有 c_str 方法。函數
string_view 所引用的字符串頗有可能不是 \0
結尾的(Null-terminated byte strings),大多數 C API 都要求零結尾字符串,致使 string_view 和 C 函數互操做性不好(請不要不加考慮直接把 string_view#data() 傳給 C 函數)。code
某些 C 函數接受長度參數,好比 fwrite,還有某些函數雖然沒有顯式的要求你傳字符串長度,可是也能夠指定,好比 printf。字符串
你們都知道 printf 輸出字符串的方式是 %s
(請不要把字符串當格式化自字符串直接輸出),其實 %s
還能接受一些參數,完整形式是:%.Ns
。其中 N 表明字符串中輸出字符的個數,截取前三個字符輸出就是 %.3s
。更強大的是 N 能夠是字符 *
,表明輸出的字符經過參數傳入,因此經過 printf 家族輸出 string_view 的方式就是get
printf("%.*s", int(sv.length()), sv.data());