Visual Studio的Unicode和ASCII

來源:互聯網
上載者:User

標籤:

Visual C++自2005版之後,工程的預設字元集屬性改為使用寬字元集(Unicode),因此預設情況下不應使用多位元組字元集(ASCII)。

這個改動讓我們從網上、書上等處擷取的代碼無法正常編譯。例如下面這個基於控制台、擷取檔案絕對路徑的程式。

#include<windows.h>#include<stdio.h>int main(){   char szDir[MAX_PATH];    GetCurrentDirectory(MAX_PATH,szDir);   printf("The Current Directory is %s",szDir);    getchar();   return 0;}

在2005以後的Visual C++版本中,由於預設使用了Unicode,該程式無法正常編譯。

解決辦法有很多:

方法一:(推薦)

使用Unicode的類型、函數。本例中將類型char變為TCHAR,函數printf改為wprintf,字串的前面加L,或用放在_T( )的括弧中。如下:

#include<windows.h>#include<stdio.h>int main(){   TCHAR szDir[MAX_PATH];    GetCurrentDirectory(MAX_PATH,szDir);   wprintf(L"The Current Directory is %s",szDir);    getchar();   return 0;}

方法二:(推薦)

不修改原始碼,而去修改編譯器的設定。

右鍵“項目”—“屬性”—“常規”—“字元集”(由預設的Unicode字元集改為“未設定”或“多位元組字元集”)

方法三:(不推薦)

把函數改為ASCII的函數。如將GetCurrentDirectory改為GetCurrentDirectoryA。

 

另外,編譯無法通過時通常提示類型轉換方面的錯誤資訊。比如,提示不能將參數 2 從“char [260]”轉換為“LPWSTR”。如果此時將char類型字串強制轉換成LPWSTR類型,由於Unicode中每個字元佔2個位元組,ASCII中每個字元佔一個位元組,printf函數在輸出時,只會輸出第一個字元。

Visual Studio的Unicode和ASCII

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.