std::string の途中に null 文字が含まれている場合の処理
Twitter で見かけたんですが、次のように途中に null 文字が含まれている場合でも最後まで出力されます。
#include <string> #include <vector> #include <iostream> int main(){ std::vector<char> chars { 'h', 'o', '\0', 'm', 'e' }; std::string str(chars.begin(), chars.end()); std::cout << str.c_str() << std::endl; std::cout << str.length() << std::endl; std::cout << str.find('m') << std::endl; return 0; } /* output: home ho 5 3 */
std::string::length
や std::string::find
とかも問題なく最後まで処理されます。
これはちょっと以外だった。
これ、内部だとどういう風になってるのかな。
あと当然ですが std::string::c_str
等で char*
に変換した場合は ho
までしか出力されません。