vc 2019中const char不能初始化const wchar t,為何

時間 2021-09-03 07:05:17

1樓:

這是ansi 跟unicode編碼的差異造成的

具體的講,vc2010預設的編碼方式是unicode,這種編碼方式對每個字元分配2個位元組,我們稱之為wchar寬字元

而如果是從c語言開始學起,那麼我們定義字元都用char a;這是ansi版本的,這種編碼方式對通常的字母、數字等是1個位元組的,對漢字是2個位元組的。

解決辦法:

在tchar.h中,定義了1種通用的字元型別:tchar

如果編譯器是unicode版本的,tchar被typedef為wchar

如果編譯器是ansi版本的,tchar被typedef為char

而且,很多c語言的庫函式也都有其通用形式,如strcpy()的通用形式為_tcscpy()

另外text巨集可以根據不同版本將字串常量也相應的轉化

所以,在**中,使用tchar 定義字元形變數,使用text巨集處理字串常量,使用庫函式的通用形式,就可以完美解決這個問題,實現1個源**,既可以按unicode編譯,又可以按ansi編譯

vc6.0中在工程--設定--c/c++--前處理器,定義識別符號:unicode,_unicode就可以設定按什麼編碼進行編譯,vc2010我沒設定過,不清楚位置在哪,應該差不多

例如:程式模板應該是這樣的:

#include

tchar sz[50];

tchar *p=text("字串");

_tcscpy(sz,p);

2樓:匿名使用者

const char* 和const wchar_t*是不同型別的指標。char每個字元佔一個位元組,

wchar_t每個字元佔2個位元組,當然就不能用const char* 初始化const wchar_t*了。

3樓:卡么四

wchar_t str[10] = _t("my string");

加 _t 表示unicode寬字元

char *const p;與 const char * p;的區別

4樓:北漂碼農

const char *p;的意思是p指向的目標空間的內容不可變化,char * const p;的意思是指標p的值不可變,但它指向目標的值可變。

1、char * const p : 定義一個指向字元的指標常數,即const指標,其實const 放在p前證明p是一個const,p是不允許改變的。

2、const char* p : 定義一個指向字元常數的指標,const 是c描述char的,char是const,所以指標可變。

擴充套件知識:

char const* p : 等同於const char* p;const char **p是一個指向指標的指標,那個指標又指向一個字串常量,char ** p也是一個指向指標的指標,那個指標又指向一個字串變數。

5樓:匿名使用者

前者定義p為常量,即只能單向賦值一次,p++為p=p+1,重複賦值給常量,出錯,後者p為地址變數,地址變數是指向該變數的儲存地址值如:4b3f6a,不能賦給一個字元值(字元相當於ascii表中對應的整數)如強制賦值,會把原地址變數p變為一個兩位數的整數,造成地址指標溢位。而p++,則表示把該地址變數向下一個儲存單元移動一位,如4b3f6a到4b3f6b.

所以合法。

6樓:漸進_恐慌

const char  * p等價於 char const  *p ,定義出來的指標可以p++;

char * const 定義出來的指標不可以++;

const 表「只讀」

7樓:匿名使用者

char *const p 修飾指標為常量 指標指向內容可以是變數~既 p++這樣的操作不合法 *p='3' 合法

const char * p 是p指向的內容是常量~p是變數~

~既 p++合法 *p='3' 不合法

找不到vc2019的靜態連結選項(console不是mfc)

控制檯程式不分靜態動態庫 嚴格意義上講都是靜態的 直接都是使用的window標準庫。當然分單 多 除錯 釋出等多個版本。我用的vs2003,不好下結論。你把工程配置修改為多位元組字串試試。v05預設都是wide的。你用depends看看你生成的程式其依賴性了。就是mt那個。不過如果是debug版本要...

C 程式設計問題,VC2019版本關於一堆陣列的問題 高手

include using namespace std void main cout 按由低到高排列以後 endl for int i 0 i lenth i cout ray i cout endl 注意 這句話int ray new int lenth 在這裡我用的指標new空間,相當於是動態分...

vc中釋放動態陣列的問題,vc中釋放動態陣列的問題

我覺得問題不是出在free函式的呼叫上面,而是出在memcpy這個函式的呼叫上面,memcpy函式的呼叫形式如下 memcpy void dest,const void src,size t n 關鍵在於size t n這n上面,樓主在位p分配空間的是用count就已經是位元組數了,而這裡的size...