2012-06-25 93 views
0

我試圖建立一個實用工具類,我可以重新使用,即轉換一個std::string to a char*功能的返回值的char *返回垃圾

char* Foo::stringConvert(std::string str){ 
     std::string newstr = str; 
     // Convert std::string to char* 
     boost::scoped_array<char> writable(new char[newstr.size() + 1]); 
     std::copy(newstr.begin(), newstr.end(), writable.get()); 
     writable[newstr.size()] = '\0'; 
     // Get the char* from the modified std::string 
     return writable.get(); 
} 

當我試圖加載從輸出的代碼工作在stringConvert函數內,但是當在我的應用程序的其他部分中使用時,此函數返回垃圾。

例如:

Foo foo; 
char* bar = foo.stringConvert(str); 

上面的代碼返回垃圾。 有沒有解決這類問題的方法?

+0

什麼是可寫的? – cppcoder

+0

如果你沒有遺漏代碼,回答這個問題會更容易。 –

+0

@cppcoder boost :: scoped_array 可寫(new char [newstr.size()+ 1]); – xybrek

回答

1

爲什麼不只是使用std::string.c_str()?這是一種圖書館方法,可以滿足您的需求。

+0

我不能使用c_str()函數,因爲我會得到這個錯誤:無法將參數2從'const char *'轉換爲'LPSTR'(char *) – xybrek

+0

您是否正在使用一些Win API功能? – undefined

+0

是的,我正在使用Win32應用程序 – xybrek

2

我要去承擔writable是具有自動持續時間的對象,自毀它包含在析構函數的char* - 那是你的問題 - 無論writable.get()回報不再有效。

只需返回std::string而不是,爲什麼地球上你需要一個原始的char *

+0

我不能使用c_str()函數,因爲我會得到這個錯誤:無法將參數2從'const char *'轉換爲'LPSTR'(char *) – xybrek

+0

@xybrek爲什麼bar'是char * ?你在修改字符串嗎?你需要修改字符串嗎? –

+0

char *是需要在我的應用程序中的某個函數上傳遞的參數 – xybrek