怎样将ansistring类型转换成LPCSTR?
LPCSTR的定义是const char *,怎样将一个ansistring值转换成这种类型?
我试了strcpy(aa,bb.c_str()),提示说不能将一个const char *转换成char *,
请大家帮助!
问题点数:20、回复次数:13Top
1 楼kataboy(老公)回复于 2003-05-01 19:29:56 得分 0
你试试用TVariant转换一下。Top
2 楼lilachue(静水思雅)回复于 2003-05-01 19:38:33 得分 0
try:
const char *p ;
AnsiString str ;
p = str.c_**() ;//*:通配符
这是一个子函数,具体名称我记不得了,自己试试!Top
3 楼PPower(月亮光光,照地堂)回复于 2003-05-01 19:41:21 得分 20
AnsiString str = "";
LPCSTR pConst ;
char * p = const_cast<char *>(pConst);
strcpy(p, str.c_str());
//既然定義成為const的,那就是說不能改變其內容的,最好別這樣做。Top
4 楼hslyw()回复于 2003-05-01 19:51:23 得分 0
到现在还没有搞定,请大家继续提供帮助Top
5 楼qibo999(行路者)回复于 2003-05-02 10:51:57 得分 0
应该就是bb.c_str()啊?要不就不要用变量:const AnsiString bb="abcdefg";LPCSTR aa;
strcpy(aa, bb.c_str());
Top
6 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2003-05-02 13:17:23 得分 0
AnsiString s="asasa";
LPCSTR aa=(LPCSTR)s.c_str();
Top
7 楼PPower(月亮光光,照地堂)回复于 2003-05-02 13:35:42 得分 0
直接寫就行了呀:
AnsiString s="asasa";
LPCSTR aa = s.c_str();
把char *的值賦給一個const char *是合法的。
但是你要注意的是編譯能通過,運行不一定正常。
因為:假如你在寫
LPCSTR aa ;
aa = Edit1->Text.c_str();
Edit2->Text = aa ; //不好意思,編譯沒問題,可是結果卻不是你所想的。
應該這樣寫:
AnsiString str = Edit1->Text ;
aa = str.c_str();
Edit2->Text = aa ; //這回結果正確了。
其原因是:Edit1->Text.c_str()返回的是個臨時變量,Text是TEdit類的一個屬性,並不是一個數據成員,屬性有可能是用函數實現的,這就出現了這種情況。
有關這方面的討論很多,可查看一下以前的貼子。但如果看BCB的幫助,我認為更好。Top
8 楼myy()回复于 2003-05-02 14:14:26 得分 0
这样也不好的:
AnsiString str = Edit1->Text ;
aa = str.c_str(); //!!不要保存AnsiString.c_str()的值,容易出错的!!!
Edit2->Text = aa ; //這回結果正確了。
AnsiString.c_str()的值应该直接用,不应保存,因为它会变。比如:
AnsiString s="hfhfhf";
char *p=s.c_str();
s="saxasxsaxasxsmslkamkamdxlsdakmxlasmxmaslmxlasmxlasmxlmsamxalskmx";
//用p.....
//因为s内部可能重新分配了内存,这时s.c_str()就已经与p不再相等了!p成了野指针!
//你实验时,可能不会出错(可以把s重新赋很长的串,这样出错机会更大)
Top
9 楼shadowstar(CodeFast for Delphi & C++Builder)回复于 2003-05-02 14:21:12 得分 0
这个问题不是很简单么? 强制转化一下就可以了啊! 不知道楼主是什么意思?
AnsiString bb = "asasa";
LPCSTR aa = new char[256];
strcpy(const_cast<char*>(aa), bb.c_str());
Top
10 楼PPower(月亮光光,照地堂)回复于 2003-05-02 17:08:22 得分 0
當我要用指針操作字符串時,確實是這麼寫代碼的,因為有時AnsiString提供的函數解決不了問題。
AnsiString str = Edit1->Text ;
aa = str.c_str(); //!!不要保存AnsiString.c_str()的值,容易出错的!!!
Edit2->Text = aa ; //這回結果正確了。
myy 也指出了這樣寫隱藏的錯誤,可是不這樣寫就只有作一個STRCOPY,只是不想做這個動作,沒必要。為了讓程序看起來是可靠點,可以這樣寫:
AnsiString str = Edit1->Text ;
{//用個{}號把代碼括起來,是要屏蔽{}裡面定義的局部變量。
char *aa = str.c_str(); //
...//這裡是指針操作,在這段代碼中要保證不對str進行任何賦值動作,否則就是錯的。
Edit2->Text = aa ; //這回結果正確了。
}
//移出{}代碼塊後,char *aa 無法使用,野指針的問題也就不存在了,這樣做只是為了那麼一點效率,str的內容可以用char *高效地修改。是否要這樣用,自己看著辦吧,使用指針不小心就會出錯的。
Top
11 楼teatool(美貌与智慧并重,英雄与侠义的化身)回复于 2003-05-02 17:37:44 得分 0
.c_str();Top
12 楼ThinkX(秋天的树)回复于 2003-05-02 17:57:09 得分 0
这种做法没有问题,编译通过
AnsiString ss = "ddddddaaaa";
char ds[100];
strcpy(ds, ss.c_str());
其实c_str()返回的是char*而不是const char*。Top
13 楼hslyw()回复于 2003-05-03 17:18:13 得分 0
最后是这样解决的:
char *p=new char[bb.length[]+1];
strcpy(p,bb.c_str());
aa=p;
使用了一个指针进行过度。
多谢大家的回复。
Top
相关问题
- 类型转换:LPCSTR到LPTSTR
- 怎样将AnsiString类型转换成wchar_t类型?
- 关于 AnsiString 类型到 wchar_t * 类型的转换
- AnsiString类型要如何才能转换成TVariantInParam类型?
- 各位大虾:怎样将AnsiString 类型转换成char *
- 怎样将AnsiString or char * 的类型转换成wchar_t型
- C++BUILDER 中CHAR ,STRING ,ANSISTRING,WIDESTRING 4 种类型怎样转换?
- 快来抢分:怎样把 “unsigned char *”转换成“AnsiString”类型?
- 请各位大虾帮忙“LPCSTR与char *类型转换”,多谢
- 如何把Char或AnsiString转换诚wchar_t类型




