天天看點

const char*作為傳回值的困惑

首先标題都不知道怎麼樣才能表達這個困惑,索性使用這個是因為當const char*作為傳回值的時候有兩個困惑之處:

1、如果有下面的情況

const char* Func(std::wstring wstr)
{
	std::string s = TO_ACSII(wstr.c_str());//使用_bstr_t或者自己寫的轉換函數
	return s.c_str();
}
           

這樣傳回的值是錯誤的,字元串最開始一個自己會變成0,導緻整個字元串廢棄,如果舍棄第一個字元,那麼字元串也就不是想要的結果,至今不知道為什麼。

嘗試過各種方法,比如參數改成const wchar_t*或者使用memcpy之類,都失敗,調試的時候就發現,是std::string的階段還是對的,一到s.c_str()這裡傳回就開始錯誤了。總之其他能想到的方法都試了,均失敗。後來想到兩種方法可以解決:1、new char[size],然後memcpy或者strcpy,傳回出去就是正确的。2、從外面傳進來記憶體塊,大概是最安全的做法,具體是函數外面char sztmp[size];然後多一個char* 參數,具體怎麼做,知道的就知道了,不知道的我懶得說了。

2、const char*作為傳回值是個奇怪的設定,因為這個本來應該是常量。。。然而你在函數裡聲明一個常量傳回出去顯然毫無意義,但是除了使用std::string的c_str(),我還真不知道該用什麼辦法,難道是用一個靜态字元串麼?

繼續閱讀