- CString csPlus;
- ?CString csSummand;
- ?m_PlusNumber.GetWindowTextW(csPlus);
- ?m_Summand.GetWindowTextW(csSummand);
- ????
- ?int nPlus = atoi(csPlus.GetBuffer(0)); //將編輯框文本轉換成整數
- // int nPlus = atoi(strcpy(csPlus.GetBuffer(10),"aa"));
- ?csPlus.ReleaseBuffer();
- ?int nSummand = atoi(csSummand.GetBuffer(0));
- ?csSummand.ReleaseBuffer();
- ?int nRet = nPlus + nSummand;
- ?char chRet[128] = {0}; //將結果裝換成字符串
- ?itoa(nRet,chRet,10);
- ?m_Result.SetWindowTextW(chRet);
? 在 5? 8?? 13 行處會報錯
原因分析:
這些代碼在VC6 下面是可以的? 在VC2010下不能通過
VC6默認使用字符ANSII編碼方式
VC2010默認使用UNICODE編碼方式
為了滿足程序代碼國際化的需要,業界推出了Unicode標準,它提供了一種簡單和一致的表達字符串的方法,所有字符中的字節都是16位的值,其數 量也可以滿足差不多世界上所有書面語言字符的編碼需求,開發程序時使用Unicode(類型為wchar_t)是一種被鼓勵的做法。
LPWSTR與LPCWSTR由此產生,它們的含義類似于LPSTR與LPCSTR,只是字符數據是16位的wchar_t而不是char。
CString是一個動態TCHAR數組,BSTR是一種專有格式的字符串(需要用系統提供的函數來操縱,LPCTSTR只是一個常量的TCHAR指針。
在ANSII和UNICODE兩種情況下,TCHAR的字符位數不一樣,所以會有這樣的報錯。
最簡單的解決方法是工程右鍵屬性 修改編碼方式從unicode改為多字節字符集。
在VC2010中 將CString轉換成char? 應該使用 _wtoi
5 ,8修改為:
- int nPlus = _wtoi(csPlus.GetBuffer(0));
- ?int nSummand = _wtoi(csSummand.GetBuffer(0));
對13行的修改 修改為:
可添加聲明
- CString csRet;
字符串指針(char *)等已經被CString構造函數支持的數據類型可以直接賦值
將chRet賦給csRet
- csRet = chRet;
最后一行修改為
- m_Result.SetWindowTextW(csRet);
對13行的修改更簡化應該為尋找一種將int型轉換成CString的方法。
在VC6中可以直接?
- csRet.Format("%d",nRet);
但是在2010中不適用。
在VC2010中應該這樣寫
- csRet.Format(_T("%d"),nRet);
OK? 修改完成 可以運行