有很多次這個問題已經被問及許多答案 - 其中沒有一個適用於我,似乎也適用於其他許多問題。問題是關於MFC下的CStrings和8bit字符。我們都希望能夠在所有情況下都能正常工作的答案,而不是特定的情況。將寬CString轉換爲char *
void Dosomething(CString csFileName)
{
char cLocFileNamestr[1024];
char cIntFileNamestr[1024];
// Convert from whatever version of CString is supplied
// to an 8 bit char string
cIntFileNamestr = ConvertCStochar(csFileName);
sprintf_s(cLocFileNamestr, "%s_%s", cIntFileNamestr, "pling.txt");
m_KFile = fopen(LocFileNamestr, "wt");
}
這是對現有代碼(由其他人)進行調試的補充。 我不想更改函數簽名,它在很多地方使用。 我無法更改sprintf_s的簽名,它是一個庫函數。
在什麼編碼中,你會喜歡你的C風格的字符串,以及你想要對那些不可表示的字符做什麼? – Wintermute
MFC或Windows中沒有8位字符。這些是[MBCS](https://msdn.microsoft.com/en-us/library/cwe8bzh0.aspx)字符,它們是根據特定的[代碼頁](http://en.wikipedia.org/)解釋的。維基/ Code_page)。字符 - 一般來說 - 不能被正確解釋,除非你指定了它的編碼。您的目標字符串應該使用哪種編碼?那些不可代表的角色呢?爲什麼不直接調用[swprintf_s](https://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx)呢? – IInspectable
[Convert CString to const char \ *]可能的重複(http://stackoverflow.com/questions/859304/convert-cstring-to-const-char) – IInspectable