因為作業需要,要用程式改動文本檔案,由于界面賦值是字串性質,而文本檔案讀取函式fgets()引數必須字符陣列,因此用代碼轉換寫入文本,書寫如下:
1.
UnicodeString Db = cxDBTextEdit59->Text;
//假設字串為“因為作業需要,要用程式改動文本檔案”這幾個字;
AnsiString Cstr = Db; //真不懂為啥非要用UnicodeString代替以前的AnsiString,
char sch[64];
int i,j;
j= Cstr.Length();//
for(i=0;i<j;i++)
{
sch[i] = Cstr[i+1];//AnsiString的第一個下標從1開始,陣列是從0開始。
}
fprintf(px,"%s",sch);///
2. UnicodeString Db = cxDBTextEdit59->Text; ;
char* cp = new char[Cstr.Length()+1];
__try
{
strcpy(cp, Cstr.c_str());
fprintf(px,"%s",sch);///
}
__finally
{
delete[] cp;
}
以上結果都無法打開文本檔案,用查看器發現兩種方法都賦值為亂碼,希望大神幫助解答下,謝謝!!!!!!!!!
uj5u.com熱心網友回復:
應該都沒有問題,以第二種為例:UnicodeString Db = Edit1->Text;
FILE *px=fopen("temp.txt","w");
AnsiString Cstr = Db;
char* cp = new char[Cstr.Length()+1];
__try
{
strcpy(cp, Cstr.c_str());
fprintf(px,"%s",cp); //不是sch
}
__finally
{
delete[] cp;
}
fclose(px);
uj5u.com熱心網友回復:
謝謝樓上的,可是都是錯誤的提示,賦值進去執行程式都是亂碼uj5u.com熱心網友回復:
你應該先弄清楚你的文本檔案是什么格式的,文本檔案也有ascii和unicode之分的。。uj5u.com熱心網友回復:
謝謝,我再弄弄
uj5u.com熱心網友回復:
樓主要理解Unicode和ascii的本質。c++builder為了支持多國語言,所有界面控制元件獲取的字串都說Unicode形式的。
比如說
UnicodeString str = "123"; 這里做了兩個動作,把"123"轉成了Unicode字符,再copy到str里去了。
你的寫法不對,正確的寫法應該是這樣。
UnicodeString Db = cxDBTextEdit59->Text;
AnsiString Cstr = Db.t_str() (如果你的編譯器是2009版本以上的!!!)
uj5u.com熱心網友回復:
另外說一下。c++builder2007以下的
String 相當于AnsiString 所有界面的Text都是ascci
c++builder2010以上的
String 相當于UnicodeString , 所有界面的Text都是unicode
uj5u.com熱心網友回復:
ascci轉UnicodeAnsiString cStr = '123";
UnicodeString uStr = cStr; //默認幫你轉了
AnsiString cStr2 = uStr .t_str(); 手動轉
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/64545.html
標籤:基礎類
上一篇:WA 求大神!!1
