1. 程式人生 > >解決 C2664 “char *strcpy(char *,const char *)”: 無法將引數 2 從“CString”轉換為“const char *”

解決 C2664 “char *strcpy(char *,const char *)”: 無法將引數 2 從“CString”轉換為“const char *”

在使用舊工程中的函式時, 在VS 2017上編譯出現如上問題, 但是該函式在之前的版本上可以正常編譯, 怎麼會出現這問題呢?難道不向前相容, 不應該, 一定是哪裡沒設定好, 在找資料查詢之後, 還是找到了, 記錄下, 方便大家也方便自己.

1. 編譯錯誤顯示圖在這裡插入圖片描述

根據錯誤提示, 嘗試修改字符集, 應該可以解決.

2. 修改字符集, 採用多位元組字符集

在這裡插入圖片描述
在這裡插入圖片描述

3. 重新編譯

在這裡插入圖片描述

重新編譯, 還是出錯, 但已經不是剛才的錯誤了, 說是函式不安全, 這下就有眉目了, 使用巨集告訴編譯器不必理會即可.

4. 在前處理器定義中新增巨集在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

5. 設定完之後, 重新編譯工程, 則不會再報錯, 編譯通過

在這裡插入圖片描述

最後, 我再VS 2017之前的版本上又重新試了下工程, 發現之前的版本只需要修改下字符集即可, 而在VS 2017上必須要在前處理器中新增巨集定義才可以, 可以得出, VS 2017對程式碼的安全性提高了很多, 底層又做了很多開關, 限制. 總體來說, 還是很人性化的.