由於結構體中用到聯合體(聯合體需要確定分配記憶體分配大小)或其它因素,需要用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 當然你也可以把它...