【C++文字列操作】string型からchar*型への変換
string型からchar*型へ
string型からchar*型への変換が必要になったのでメモ。
関数定義。
#include <string.h> inline char* str2char(char* dest, const std::string& src, size_t num) { strncpy(dest, src.c_str(), num-1); *(dest+num-1) = '\0'; return dest; } #endif
呼び出し元。第三引数にはコピー先の配列長を渡してやります。
#include <iostream> #include <string> #include "str_util.h" int main() { char* c = new char[5](); std::string s = ""; str2char(c, s, 5); std::cout << "1. s = \"" << s << "\", c = \"" << c << "\"" << std::endl; s = "123"; str2char(c, s, 5); std::cout << "2. s = \"" << s << "\", c = \"" << c << "\"" << std::endl; s = "12345"; str2char(c, s, 5); std::cout << "3. s = \"" << s << "\", c = \"" << c << "\"" << std::endl; delete[] c; return 0; }
実行結果。
終端文字'\0'を入れる必要があるので、コピーできる最大サイズは(コピー先配列長 -1)です。
1. s = "", c = "" 2. s = "123", c = "123" 3. s = "12345", c = "1234"
string型からconst char*型へ
ちなみにstring型からconst char*型へはc_str()を呼び出すだけでOKですね。
#include <iostream> #include <string> #include <typeinfo> int main() { std::string s = "123"; std::cout << "s.c_str() = \"" << s.c_str() << "\"" << std::endl; std::cout << "typeid(s.c_str()).name() = \"" << typeid(s.c_str()).name() << "\"" << std::endl; return 0; }
実行結果。 PKc = const char*型ということらしいです。
s.c_str() = "123" typeid(s.c_str()).name() = "PKc"
参考にしたサイト
strncpy
typeid ‐ 通信用語の基礎知識