PDA

Tam Sürümünü Görmek İçin : AnsiString'i Char'a çevirme


MUBNET
25/06/2003, 14:48
Merhaba arkadaşlar.Durum biraz acil de;C++da
AnsiString'i Char'a nasıl çevirebilirim?

Teşekkürler...


acehreli
25/06/2003, 18:25
Aslinda herhalde AnsiString'i 'char *'a çevirmek istiyorsun...

AnsiString'i hayatimda ilk defa duydugum için, :) google'da 'convert ansistring' diye arama yaptirinca onun da std::string gibi c_str() adli bir islevi oldugunu ögrendim.

Yalniz, aynen std::string'de oldugu gibi, aslinda c_str() 'char *'a degil, 'char const *'a çevirir:

AnsiString dizgi;
/* ... */
char const * charDizisi = dizgi.c_str();

Önemli olan bir nokta, c_str'in döndürdügü dizginin asil nesnede bir degisiklik yapilana kadar geçerli oldugudur. Asil nesne degistiginde c_str'in döndürdügü dizgi artik kullanilamaz.

Bazi durumlarda, c_str'i geçici bir nesne için çagirdigimizda, o dizgi bastan geçersiz hale gelebilir:

AnsiString foo, bar;
/* ... */
char const * sonuc = (foo + bar).c_str();

Bu noktada 'sonuc'u olusturan ve foo ile bar'in birlestirilmeleriyle olusan geçici nesnenin hayati sonlandigi için, 'sonuc' geçersizdir.

Bunlar aynen std::string'in davranislari oldugu için, acaba AnsiString diye özel bir sinifa neden gerek duyulmus? Anladigim kadariyla, bazi kütüphane islevleri onu kullaniyorlar ve o kütüphaneyi kullananlar da onu kullanmak zorunda kaliyorlar. Peki o zaman... :)

MUBNET
25/06/2003, 18:51
Aslında bu soruyu sorduktan sonra cevabı buldum.Maalesef bu işe yaramıyor, denedim.

Teşekkürler...

acehreli
25/06/2003, 21:05
c_str mı işe yaramıyor, yoksa senin bulduğun cevap mı? 'char const *'a dönüştürmek istediğini düşünmekte haklı mıyım?

Şu adreste c_str'ın olası yanlış kullanımlarıyla ilgili bilgi var:

http://www.bridgespublishing.com/articles/issues/0008/Understanding_AnsiString's_c_str()_function.htm

MUBNET
25/06/2003, 21:43
Ben 'char const *'a değil, doğrudan char'a dönüştürmek istiyordum.

Aslında amacım;
CopyFile(char Source, char Destination, int ipFileExists);
konutundaki char'lara dışardan AnsiString parametresi vermekti, olmadı.Neyse başımın çaresine bakarım artık.

acehreli
25/06/2003, 22:01
CopyFile'ın ve aldığı parametrelerin adlarına bakarak onun 'char' alamayacağını söyleyebilirim. Herhalde Source asıl kütüğün, Destination da kopyalanacağı kütüğün adları olmalı... Kütük adlarını nasıl 'char'la belirleyebiliriz ki?

Öyle adlar dizgilerle belirlenirler. 'char const *' da dizginin başını göstermek için çok uygundur.

google'da bir de 'CopyFile AnsiString' araması yaptırınca, CopyFile'ın gerçekten de 'char const *' aldığını gördüm. Örneğin şöyle bir kullanım buldum:

AnsiString source=MainForm->ApplicationFolder + "\\templates\\header.txt";
AnsiString dest=MainForm->ProjectFolder + "\\header.txt";
CopyFile(source.c_str(),dest.c_str(),false);

Çözümü bulduğun zaman bize de söylersen seviniriz :)

MUBNET
25/06/2003, 22:05
CopyFile(source.c_str(),dest.c_str(),false);
Arkadaşım bunun aynısını ben de denedim ama olmadı.Dur bi' bir daha deneyeyim.Ve yardımların için çok teşekkürler...

MUBNET
25/06/2003, 22:08
Oldu,olduuuuuuuu :)
Ne kadar sevindiğimi bilemezsin.Teşekkür ederim.Ben false yerine 0 yazıyo'muşum.