MFC中CString轉換成char陣列的問題

2021-06-18 05:53:57 字數 1337 閱讀 5562

由於結構體中用到聯合體(聯合體需要確定分配記憶體分配大小)或其它因素,需要用char陣列來儲存字串,但是在mfc中一般都是用cstring來存放字條串。關於它們之間的轉換,在vs2008中有時會出現異常情況。在msdn是這樣寫的:

cstring orig("hello, world!");

// convert to a char*

const size_t newsize = 100;

char nstring[newsize];

strcpy_s(nstring, orig);

但在實際應用中,並不能通過,總會在strcpy_s()函式中出錯,或者在nstring的後面跟著很多亂碼尾巴。在網上查閱了一些方法。如下:

方法一: 

char *p; 

cstring str="hello"; 

p=str.getbuffer(str.getlength()); 

str.releasebuffer(); 

方法二: 

cstring str="hello"; 

char ch[20]; 

memcpy(ch,str,str.getlength()); 

方法三: 

char *ch; 

cstring str="hello"; 

ch=(lpstr)(lpctstr)str;

但總達不到期望的結果。隨後再在網上查,發現是unicode字符集的問題。選擇專案->專案屬 性(或直接按alt+f7)->配置屬性,在右邊找到「字符集」,將「使用unicode字符集」改為「使用多位元組字符集」。儲存之後需要重新生成 解決方案。這樣上面的方法都可以通過並實現,但是在方法二中,最好不要使用memcpy,直接用strcpy_s(char*, cstring)就可以了,因為用memcpy也會出現亂碼尾巴。

如果不想改變unicode字符集,網上也有介紹方法,但我沒有試過,在此列出來供網友們參考:

cstring strpath = l"adfafs主聲音檔案fsfsa";

int nlength = strpath.getlength();

int nbytes = widechartomultibyte(cp_acp,0,strpath,nlength,null,0,null,null);

char* voicepath = new char[ nbytes + 1];

memset(voicepath,0,nlength + 1);

widechartomultibyte(cp_oemcp, 0, strpath, nlength, voicepath, nbytes, null, null); 

voicepath[nbytes] = 0;

MFC中CString轉換成char陣列的問題

由於結構體中用到聯合體 聯合體需要確定分配記憶體分配大小 或其它因素,需要用char陣列來儲存字串,但是在mfc中一般都是用cstring來存放字條串。關於它們之間的轉換,在vs2008中有時會出現異常情況。在msdn是這樣寫的 cstring orig hello,world convert to...

如何實現CString轉換成char

方法一 cstring str hello char p1 p1 cw2a str.getbuffer str.getlength 注 這種方式轉換因編碼方式不同有可能出現亂碼 方法二 cstring str hello char p1 new char str.getlength 1 要申請空間 ...

C String型別轉換成Char型別

static void main string args string型別本來就可以看作乙個char陣列,如 string str abcde console.writeline str 3 輸出d foreach char c in str console.writeline c 當然你也可以把它...