2016-03-18 289 views
0

我想從使用C++的CString得到一個子字符串。爲此,我正在使用strstr函數。但它不能在al工作strstr總是返回null

CString str = m_sectionDataList->GetNext(pos);   
char* chToMatch = (char*)(LPCTSTR)str;   
char *match = "=";  
//char * sMatched = strstr(ch, match); 
if (strstr(match, chToMatch) != NULL) { 
    MessageBox(NULL, str, L"Done", 1); 
} 
+1

您需要強制轉換'str'有點令人擔心,您是否啓用了UNICODE?然後'LPCTSTR'是一個* wide *字符串,你不能使用'strstr'。 –

+1

你應該避免使用C風格的演員。我不確定'CString'是否有一個產生LPCTSTR的轉換運算符;但如果沒有,那麼你的代碼會導致未定義的行爲。而是寫'char * chToMatch = static_cast (str);'。如果這給出了一個編譯錯誤,那麼這意味着你的代碼已經被破壞了,只是你現在要求編譯器檢測它是否被破壞了。 –

+0

爲什麼不使用['CString :: Find'](https://msdn.microsoft.com/en-us/library/aa314323%28v=vs.60%29.aspx)? –

回答

1

您正在傳遞錯誤順序的參數。 strstr期望第一個參數被掃描字符串,第二個應該是一個匹配。現在你正在一個字節=模板中搜索你的目標字符串,這肯定會失敗。

+0

我應該改變序列if(strstr(chToMatch,match)!= NULL) –

+0

@DigvijayRathore是的,當然。 – Ari0nhh

+0

我做了..不工作.. –

0

最後我找到了。需要使用C++的宏,你會發現它的轉換。

CT2A ascii(str, CP_UTF8); 

現在你可以使用ascii.m_psz和它的緩衝區來訪問它。