私は上記の操作を実行したいと思いますが、char配列が手元の文字列とまったく同じサイズであることを確認したいと思います。C++、文字列から文字配列への変換
実際の質問は、ランタイムに決定されるサイズの配列を作成するにはどうすればいいですか?
私は上記の操作を実行したいと思いますが、char配列が手元の文字列とまったく同じサイズであることを確認したいと思います。C++、文字列から文字配列への変換
実際の質問は、ランタイムに決定されるサイズの配列を作成するにはどうすればいいですか?
:
std::string s("abcdef");
...
char* chars=strdup(s.c_str());
:空き店舗にメモリを割り当てると、一度に文字列をコピー
char* res = new char[str.size()+1];
strncpy(res, str.c_str(), str.size()+1);
文字列の長さを見つけるにはstrlen()を使用し、次にそのサイズの文字配列malloc()を使用します。
あなたは「新しい」演算子で、実行時に既知のサイズの配列を作成することができますもちろん、メモリを手動で解放する必要があります。例: man page。 @Lokiの言及通り:delete
ではなく、free(chars)
で解放されています。また、<cstring>
ヘッダーを含める必要があります。
C++世界に滞在したい場合は、vector
を使用してください。 2つのイテレータを使用してデータをコピーし、ヒープに割り当てると、とが単独でクリーンアップされます。それは治療法ではありませんか?
std::vector<char> vec(s.begin(), s.end());
std::string s = "hello";
char* c = new char[s.length() + 1]; // '+ 1' is for trailing NULL character.
strcpy(c, s.c_str());
#include <string>
int main(int argc, char *argv[])
{
std::string random_data("This is a string");
char *array=new char[random_data.size()+1];
// do stuff
delete[] array;
return 0;
}
試してみてください。
または:(好ましくは)
std::vector<char> res(str.begin(), str.end());
または:あなたがしたいすべてがC-慰めを呼び出している場合:
str.c_str()
'string'に埋め込みヌル文字が含まれている場合、' strncpy'はデータを切り捨てます。 'memcpy'がより適切です。あるいは' std :: vector <> 'のような適切なコンテナです。 – ildjarn