124

配列に変換stringしたいのですが、そうではありません。文字列を(使用またはコードに投稿した方法で)変換する方法を知っていますが、それは私が望んでいるものではありません。私は単に配列に変換したいだけです。出来ますか?charchar*char*mallocstringchar[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;
}
4

11 に答える 11

155

私が考えることができる最も簡単な方法は次のとおりです。

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());
于 2012-11-08T17:11:34.327 に答える
71

わかりました、誰も本当に良い答えをくれなかったことにショックを受けました。今度は私の番です。2 つのケースがあります。

  1. 定数 char 配列で十分なので、

    const char *array = tmp.c_str();
    
  2. または、char配列を変更する必要があるため、定数は問題ありません。次に、これを使用します

    char *array = &tmp[0];
    

どちらも単なる割り当て操作であり、ほとんどの場合、それはまさにあなたが必要とするものです。本当に新しいコピーが必要な場合は、他のフェローの回答に従ってください。

于 2015-03-05T07:55:20.500 に答える
18
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を選択する必要があります。

于 2014-12-27T02:46:43.550 に答える
6

で文字列を配列にコピーするだけstrcpyです。

于 2012-11-08T17:11:02.023 に答える
4

strcpy() を試してみてください。ただし、フレッドが言ったように、これは C ではなく C++ です。

于 2012-11-08T17:11:27.640 に答える
2

strcpy()次のように使用できます。

strcpy(tab2, tmp.c_str());

バッファ オーバーフローに注意してください。

于 2012-11-08T17:12:25.540 に答える
-1

まあ、これは単純というよりもばかげているかもしれませんが、うまくいくはずだと思います:

string n;
cin>> n;
char b[200];
for (int i = 0; i < sizeof(n); i++)
{
    b[i] = n[i];
    cout<< b[i]<< " ";
}
于 2016-04-02T16:14:28.077 に答える