2011-12-09 31 views

回答

3

您可以在運行時創建稱爲與「新」算子大小的數組:

char* res = new char[str.size()+1]; 
strncpy(res, str.c_str(), str.size()+1); 
+1

如果'string'包含任何嵌入的空字符,則'strncpy'將截斷數據。 'memcpy'在這裏更合適,或者是一個合適的容器,比如'std :: vector <>'。 – ildjarn

-1

使用strlen()來查找字符串的長度,然後malloc()是該大小的char數組。

5

上自由存儲區分配內存,並在一次複印的字符串:

std::string s("abcdef"); 

... 
char* chars=strdup(s.c_str()); 

當然,您需要手動釋放內存。文檔例如在man page。由於@Loki提到:釋放此內存是通過free(chars)完成的,而不是通過delete。另外,您需要包含<cstring>標題。

如果你想留在C++世界,使用vector;它可以用兩個迭代器創建來複制它的數據,並且將在堆上分配,將自行清理。這不是一種享受嗎?

std::vector<char> vec(s.begin(), s.end()); 
+0

現在你必須用free()來代碼。因此,它爲您節省了一行代碼,但由於您需要管理兩個不同的內存池,所以代碼變得更加複雜。 –

+0

@LokiAstari:那是非常真實的。我應該補充說 - 儘管如此,我個人更喜歡矢量方法。 – xtofl

+1

+1,用於推薦'std :: vector <>'。 – ildjarn

2
std::string s = "hello"; 
char* c = new char[s.length() + 1]; // '+ 1' is for trailing NULL character. 

strcpy(c, s.c_str()); 
1
#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; 
} 
1

嘗試:

​​

或者:(最好)

std::vector<char> res(str.begin(), str.end()); 

或者:如果你想要做的是調用C-結:

str.c_str()