string
をchar
配列に変換したいがchar*
には変換したくない。文字列をchar*
に変換する方法を知っています(malloc
または私のコードでそれをポストした方法を使用することによって) - しかしそれは私が望むものではありません。単にstring
をchar[size]
配列に変換したいだけです。出来ますか?
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
int main()
{
// char to string
char tab[4];
tab[0] = 'c';
tab[1] = 'a';
tab[2] = 't';
tab[3] = '\0';
string tmp(tab);
cout << tmp << "\n";
// string to char* - but thats not what I want
char *c = const_cast<char*>(tmp.c_str());
cout << c << "\n";
//string to char
char tab2[1024];
// ?
return 0;
}
私が考えることができる最も簡単な方法は、次のとおりです。
string temp = "cat";
char tab2[1024];
strcpy(tab2, temp.c_str());
安全のために、あなたは好むかもしれません:
string temp = "cat";
char tab2[1024];
strncpy(tab2, temp.c_str(), sizeof(tab2));
tab2[sizeof(tab2) - 1] = 0;
またはこのようにすることができます:
string temp = "cat";
char * tab2 = new char [temp.length()+1];
strcpy (tab2, temp.c_str());
わかりました、今は私の番です。 2つの場合があります。
定数のchar配列 はあなたにとって十分なので、あなたは
const char *array = tmp.c_str();
または - 変更する必要があります 定数が適切ではないため、char配列を変更してください。
char *array = &tmp[0];
両方とも 単なる代入操作 そしてほとんどの場合それがまさにあなたが必要としているものです。もしあなたが本当に新しいコピーが必要なら、他の仲間の答えに従ってください。
それをする最も簡単な方法はこれでしょう
std::string myWord = "myWord";
char myArray[myWord.size()+1];//as 1 char space for null is also required
strcpy(myArray, myWord.c_str());
str.copy(cstr, str.length()+1); // since C++11
cstr[str.copy(cstr, str.length())] = '\0'; // before C++11
cstr[str.copy(cstr, sizeof(cstr)-1)] = '\0'; // before C++11 (safe)
C++ではCを避けることをお勧めします。そのため、strcpyの代わりにstd :: string :: copyを選択する必要があります。
strcpy
を使って文字列を配列にコピーするだけです。
これでうまくいくはずです。
string line="hello world";
char * data = new char[line.size() + 1];
copy(line.begin(), line.end(), data);
data[line.size()] = '\0';
Strcpy()を試してみてください。Fredが言ったように、これはC++ではなくC++です。
strcpy()
を使うことができます。
strcpy(tab2, tmp.c_str());
バッファオーバーフローに注意してください。
文字列のサイズが事前にわからず、大きく変わる可能性がある場合は、配列オーバーロードがunique_ptr
の動的に割り当てられた固定サイズの配列を取得できます。
auto tab2 = std::make_unique<char[]>(temp.size() + 1);
std::strcpy(tab2.get(), temp.c_str());
最初は配列が十分に大きくなるように割り当てられているため、ここではstrncpy
は必要ありません。
C++ 11以降を使用している場合は、その安全性のためにstd::snprintf
またはstd::strcpy
よりもstd::strncpy
を使用することをお勧めします(つまり、書き込み可能な文字数を決定します)あなたのバッファ)そしてそれはあなたのために文字列をヌル終了するので(あなたはそれを心配する必要はありません)。次のようになります。
#include <string>
#include <cstdio>
std::string tmp = "cat";
char tab2[1024];
std::snprintf(tab2, sizeof(tab2), "%s", tmp.c_str());
C++ 17では、次の選択肢があります。
#include <string>
#include <cstdio>
#include <iterator>
std::string tmp = "cat";
char tab2[1024];
std::snprintf(tab2, std::size(tab2), "%s", tmp.c_str());
まあ私はこれが多分むしろ馬鹿げたことを知っている より 簡単ですが、うまくいくはずです。
string n;
cin>> n;
char b[200];
for (int i = 0; i < sizeof(n); i++)
{
b[i] = n[i];
cout<< b[i]<< " ";
}