2013-07-31 115 views
0

我正在試圖爲char *創建一個std :: string的副本。這是我的功能和它看到的結果:將std :: string複製到char *

void main() 
{ 
std::string test1; 
std::cout << "Enter Data1" << std::endl; 
std::cin >> test1; 
char* test2; 
test2 = (char*)test1.c_str(); 
std::cout << "test1: "<< &test1 << std::endl; 
std::cout << "test2: "<< &test2 << std::endl; 
} 

Enter Data1 
Check 
test1: 0x7fff81d26900 
test2: 0x7fff81d26908 

我不確定如果副本已創建或兩者都指向同一個位置。 如何確認?

+1

請注意,test1的是一個類,test2的是一個指針,它的完全不同。 test1.c_str()返回test1成員的指針。 Alexis的答案是將整個數據複製到新指針的正確方法。 –

回答

3

你只是複製ADRESS並使用C A C投++ 使用strdup代替

char* test2; 
test2 = strdup(test1.c_str()); //free it after 

char *test2 = malloc(strlen(test1.c_str())); 
    strcpy(test2, test1.c_str()); 
+1

不是標準功能。無論如何,這是一個重複的,並已答覆之前。 – Rapptz

+1

您的編輯錯誤。同樣在C++中,我們使用'new','delete'和'std :: copy',而不是'malloc','free'和'strcpy'。 – Rapptz

+1

是啊,你不使用char *,但字符,字符串或任何對象的矢量,但問題是關於char * – Alexis

相關問題