あなたが本当にSTDの内容からコピーされた文字の書き込み可能なバッファ::文字列が必要な場合は、std::vector<char>
を使用することができます
std::vector<char> urlAsVec(sup.c_str(), sup.c_str() + sup.size() + 1);
あまりにもあなたのためにヌル・ターミネータを書き込みます:
std::vector<char> urlAsVec(sup.begin(), sup.end());
urlAsVec.push_back('\0');
char * url = &urlAsVec[0]; // pointer you can safely write to
はまた、ベクターをこのように初期化することができます。
別の方法:あなたのベクトルが自動的にnull終端がsup.copy()がそれを書き込みませんが存在しますので、0にそのすべての要素を初期化することを
std::vector<char> urlAsVec(sup.size() + 1);
sup.copy(&urlAsVec[0], sup.size());
注意。とにかくstrcpyの代わりにsup.copy(ptr, len)
を使用することができます。これは、ヌルターミネータを手作業で書く必要がありますが、バッファサイズを指定できる点で(strncpyでも可能ですが)少し安全です。いくつかの固定値BUFLENため
char url[ BUFLEN ] = {0};
sup.copy(url, BUFLEN-1);
あなたのバッファに書き込まれたソース文字列のコピーまたは一部のコピーを取得します:あなたはこれを使用している場合たとえば、
。私の初期化子は、すべての不文バイトが0
文字ポインタを使用したい場合は、単に変数 'url'に等しいバイト数を割り当てる代わりに、単にsup.c_str()を使うだけです。 – PermanentGuest
@Unni const char *(char *だけではない)です。しかし、私はそれが実際に必要なものかもしれないことに同意します。 – adelphus
レガシーシステムに渡す必要があるまで、私は 'std :: string'をどこでも使用します。そして 'std :: string :: c_str()'を使います。 'std :: string'を使うことができない理由はありますか? –