首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

用Bcb2010中,发现一个UnicodeString转换成char*的有关问题,谁指点一下

2012-02-24 
用Bcb2010中,发现一个UnicodeString转换成char*的问题,哪位高手指点一下char *c Memo1-Text.t_str()//

用Bcb2010中,发现一个UnicodeString转换成char*的问题,哪位高手指点一下
char *c = Memo1->Text.t_str();//文本框中输入几个字符,如jac,bbbb,dddddddd等
//假如文本框中输入的字符是:jac
//这里Memo1->Text的类型是UnicodeString,
//也可以写成这样:
// UnicodeString str = "jac";
// char *c = str.t_str();
//这样的写法和使用Memo是等同的,不要使用bcb6来测试,因为bcb6里面没有UnicodeString类型,对于AnsiString类型来说取值是正确的。
char ch= *c;//这里可以得到 ch=j
ch = *(c+1); //这里取得的ch的值不是a
ch = *(c+2); //这里取得的ch的值也不是c
如果改成这样的写法:
char ch = *(c+1); //这里取得 ch = a
ch = *(c+2); //这里取得的ch的值也不是c

//也就是说只有第一次取得的字符是正确的,后续的都不正确了,不知道为何,请指点!
是用bcb2010,不是使用bcb6,因为bcb6没有UnicodeString类型

[解决办法]
unicodestring 轉換成 char * 要經過轉碼。簡單的方式是通過AnsiString轉。
UnicodeString Ustr = "abc";
AnsiString Cstr = Ustr;
char *p = Cstr.c_str();
p[0] == 'a' ; 
p[1] == 'b' ; 
p[2] == 'c' ; 
 
不經過轉碼的就發生錯誤,因為內部編碼格式不一樣。t_str是容易產生紊亂的,最好不用,就當沒有該函數好了。

[解决办法]
你这样再试试看呢,不要用char *c = str.t_str();

C/C++ code
UnicodeString Ustr = "abc";char temp[256];strcpy(temp,Ustr.t_str());for(int i =0;i<strlen(temp);i++) ShowMessage((char)temp[i]);
[解决办法]
UnicodeString类型的.t_str()方法,在XE2中已经不再建议使用。这个方法在2010中的返回值类型是不确定的,取决于系统选项中_TCHAR宏的映射。
另外是,和.c_str()、.w_str()方法一样,其返回的字符串指针的值也是不确定的。类似把.c_str()返回的值赋给一个字符串指针,在其他地方使用的方式是很不安全的。
[解决办法]
t_str会修改UnicodeString里的内容,最好少用。而且无论是c_str也好,t_str也罢,w_str之类的,都是现用现调。否则可能会有未知错误,毕竟RTL还需要保证不产生内存泄漏啊:)

热点排行