1. 程式人生 > >CString與char[] 的相互轉換方法以及結尾亂碼問題的分析解決

CString與char[] 的相互轉換方法以及結尾亂碼問題的分析解決

  這是一個很常見的問題,下面記錄下我的解決方案。

一、CString 轉化成char[]

方法一:運用 CString.GetBuffer(0) 與 strcpy

二、char[]轉化成CString

首先我們就會想到下面的寫法

可是執行結果都是:

在CString的最後多出了亂碼,而測試得到的CString物件的長度為7,這是為什麼呢?我想是這樣的:

CString 物件將ch 當做字串來處理的,所以在把一個char[]轉化成CString物件時,會分兩個過程

1. 首先會把char[]轉化成char*,這個轉化就會在字串的結尾產生亂碼,測試如下:

除錯執行得到:

2. 把char*字串儲存在CString物件的CStringData 物件中,這是儲存的已經是存在亂碼的資料了,所以在輸出時

就出現了我們看到的亂碼。

到這裡或許大家都知道了亂碼的原因了吧。

下面就著手解決,這個自然就不是問題了,只要將陣列的最後一位賦值為'/0'即可。

結果如下:

 

至此問題解決

相關推薦

CStringchar[] 的相互轉換方法以及結尾亂碼問題的分析解決

  這是一個很常見的問題,下面記錄下我的解決方案。 一、CString 轉化成char[] 方法一:運用 CString.GetBuffer(0) 與 strcpy CString str; int len = str.GetLength(); char* arr = n

CStringChar*的轉換以及中文字元寫入檔案,檔案的讀寫等

工作需要,碰到多個檔案讀取和型別轉換的問題,記錄下來。 ps:都是網上搜集來的,只是查的太多,找不到具體連結了,只好不列出處。再次感謝! 1、CString與char*的轉換 分兩種情況,一種是工程設定的是不使用Unicode編碼,這樣的比較簡單,用(LPSTR)(LPCT

VS2010 CStringchar互相轉換方法

先看如何將CString轉char*: 包涵標頭檔案 #include<iostream> #include<stdio.h> #include<afx.

【資料型別】stringchar[]的轉換方法

在 【資料結構】棧與佇列Part2:棧的應用之表示式轉換 中,儲存表示式的資料型別是string型別,而atof()函式是將char[]型別轉化為浮點數的函式。 因此,將string轉化為char[]的方法是非常重要的。 查閱資料:c++ string轉char*  我主要

MFC中CString char*相互轉化

CString->char* CString str = _T("1234"); USES_CONVERSION; char* p = T2A(str.GetBuffer(0)); str.ReleaseBuffer(); char*->CString ch

C++中stringchar相互轉換

一、string轉char* 1.data()方法 string str = "hello"; const char* p = str.data(); //或char * p=(char*)str.data(); 2.c_str()方法 stri

intchar相互轉換

一、int->char 在stdlib.h中有個函式itoa(),可以實現這個功能 itoa(i,num,10); i 需要轉換成字元的數字 num 轉換後儲存字元的變數 10 轉換數字的基數(進位制)10就是說按照10進位制轉換數字。還可以是2

c++中intchar相互轉換

一、ASCII表 瞭解int與char相互轉換之前,先讓我們看一下ASCII碼錶。 其中數字字元對應的位置為:48 - 57。 二、char轉int char轉int之前,先將運算式中的每個字元都轉換成ASCII碼值,再進行計算。 以下程式碼為例,其中i3的結

16進位制CStringint相互轉換

以下為VC2008下實現程式碼: 一、int型轉16進位制CString CString IntToCStringHex(int algorism)//十六進位制轉換 {  vector<int> reNum; CString str; //倒序輸出  do

Cstring char*的轉換,TCHAR char 轉換

使用unicode的會存在寬位元組和單位元組之間的轉換: CString轉char * 1、使用WideCharToMultiByte函式,其中mWcount為CString型別。 char* _wParam = (char*) malloc( siz

CStringchar相互轉換

CString CharToCString(char *pText) {int    iLength  = 0; wchar_t *pwText = NULL;CString csText  = _T("");/* Get the number of wide charac

MFC中 CStringChar[] 的相互轉換

為了簡化操作,我寫成了兩個函式: //CString轉Char[] 返回陣列首元素地址 char * CSocket_ClientDlg::CStringToCharArray(CString str

js數組字符串的相互轉換方法

spl new 轉換 abc bcd 數組 www htm aaa 1.數組轉字符串 var a, b; a = new Array(0,1,2,3,4); b = a.join("-"); 2.字符串轉數組 var s = "abc,abcd,aaa"; ss =

【UML】Java代碼UML模型相互轉換方法

pap ref through 沒有 src 設計模式 ron 建模工具 好用 最近重溫了幾個設計模式,看到大家的博客裏面都是Java代碼+UML視圖,UML表達整體框架,然後再秀出具體的代碼,點面結合、一目了然。所以也研究了一下Java代碼與UML模型相互轉換方法。

Unicode下的CStringchar *轉換

轉載:http://blog.sina.com.cn/s/blog_63106cd80100yq8n.html 在VS2005及以上的環境中,所見工程的預設字符集形式是Unicode,而VC6.0中,字符集形式為多位元組字符集(MBCS: Multi-Byte Character Set),

char string CString 之間的相互轉換

以上是多位元組版本。 =========================================================================================== 以下是寬位元組也就是UNICODE版本 ===============

【MFC】Unicode環境下CStringchar*轉換

CString轉const char* const char* CStr2C(CString cstring) { return CW2A(cstring.GetString()); } char*轉CString CString C2CStr(char* cstr) { ret

NSArray NSData的相互轉換 二進位制 以及陣列的相關操作

1.將NSArray轉化為NSData型別         NSData *data = [NSKeyedArchiver archivedDataWithRootObject:Array];       &nb

Unicode字符集下CStringchar *轉換

在Visual C++.NET2005中,預設的字符集形式是Unicode,但在VC6.0等工程中,預設的字符集形式是多位元組字符集(MBCS:Multi-Byte Character Set),這樣導致在VC6.0中非常簡單實用的各類字元操作和函式在VS2005環境下執行

java中陣列List相互轉換方法

1.List轉換成為陣列。(這裡的List是實體是ArrayList)   呼叫ArrayList的toArray方法。   toArray   public <T> T[] toArray(T[] a)返回一個按照正確的順序包含此列表中所有元素的陣列;返回陣列