2012-11-08 64 views
64

我想將string轉換爲char數組,但不是char*。我知道如何將字符串轉換爲char*(通過使用malloc或我將其發佈在我的代碼中的方式) - 但這不是我想要的。我只是想將string轉換爲char[size]數組。可能嗎?如何將字符串轉換爲C++中的字符數組?

#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; 
} 
+11

這似乎是C++,不C. –

+0

@FredLarson:OK,編輯,謝謝 –

+3

可能重複的[std :: string到char \ *](http://stackoverflow.com/questions/7352099/stdstring-to-char) – cegprakash

回答

87
我能想到這樣做的

簡單的方法是:

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; 
+9

'strncpy'的捕獲是它不會null-terminated如果它在源字符串中找到空值之前達到大小。一定要小心! –

+0

@FredLarson - 好點!值得放'tab2 [sizeof(tab2) - 1] = 0;'在它之後,然後呢? – Chowlett

+1

是的,我認爲這是一個合理的方式來處理它。 –

6

只需將字符串複製到數組中strcpy

4

嘗試的strcpy(),但弗來德說,這是C++,不是C

2

你可以使用strcpy(),就像這樣:

strcpy(tab2, tmp.c_str()); 

注意緩衝區溢出。做

15

最簡單的方式,它會是這樣

std::string myWord = "myWord"; 
char myArray[myWord.size()+1];//as 1 char space for null is also required 
strcpy(myArray, myWord.c_str()); 
+10

數組大小在C++中必須是編譯時常量。 – interjay

+3

與C++ 11 –

7
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++,所以的std :: string ::複製應該不是strcpy的選擇

32

好吧,我感到震驚,沒有人真的給出了一個很好的答案,現在輪到我了。有兩種情況;

  1. 一個恆定的字符數組是配不上你,讓你一起去,

    const char *array = tmp.c_str(); 
    
  2. 或者你需要修改 char數組所以常是不正常,則只要進入與此

    char *array = &tmp[0]; 
    

他們都是只是作業和大多數時候,這正是你需要的,如果你真的需要一個新的副本,然後跟隨其他人的答案。

+3

作品他想要一個字符數組,而不是他創造了一個char * – harogaston

+2

指針是同樣的事情,作爲一個字符數組。 C和C++中的數組變量只是指向數組中第一個元素的指針。 –

1

如果你不知道字符串的大小事先,它可以變化很大,你可以得到一個動態分配的固定大小的數組與unique_ptr陣列過載:

auto tab2 = std::make_unique<char[]>(temp.size() + 1); 
std::strcpy(tab2.get(), temp.c_str()); 

請注意,你不這裏需要strncpy,因爲首先分配的數組足夠大。

4

試試這種方式它應該是工作。

string line="hello world"; 
char * data = new char[line.size() + 1]; 
copy(line.begin(), line.end(), data); 
data[line.size()] = '\0'; 
0

嗯,我知道這可能是愚蠢的,而不是簡單,但我認爲它應該工作:

string n; 
cin>> n; 
char b[200]; 
for (int i = 0; i < sizeof(n); i++) 
{ 
    b[i] = n[i]; 
    cout<< b[i]<< " "; 
} 
+0

呃,不是真的。你只是假設''n''不能大於''b''。如果「n> b」,它會崩潰。最好使用已經提供的''strcpy''函數。 編輯:在某些情況下,使用''strcpy_s''可能會更好,因爲它會檢查NULL指針(如果您的平臺支持它) – droidballoon

相關問題