读书人

用Bcb2010中发现一个UnicodeString转

发布时间: 2012-02-24 16:30:38 作者: rapoo

用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还需要保证不产生内存泄漏啊:)

读书人网 >C++ Builder

热点推荐