[英]C++ Borland char * and strcpy
char *dum[32];
strcpy(&dum,InstList->Lines->Text.c_str());
InstList
是C ++ Builder的TMemo
為什么會出現此錯誤?
[C ++錯誤] emulator.cpp(59):E2034無法將'char * *'轉換為'char *'完整解析器上下文emulator.cpp(56):解析:void _fastcall TMain :: Button1Click(TObject *)
char *dum[32];
是長度為32的數組,每個元素都是char*
。 我想你打算寫
char dum[32];
這是一個32個字符的數組,然后您可以編寫:
strcpy(dum, InstList->Lines->Text.c_str());
當然,請確保InstList->Lines->Text
不會太大,以至於緩沖區溢出。
當然,我不確定為什么您需要在C ++程序中使用C字符串。
您可以使用(容易發生稱為緩沖區溢出的嚴重安全性問題)
char dum[32];
strcpy(dum,InstList->Lines->Text.c_str());
或(更好,因為它可以任意長度工作,而不會出現稱為緩沖區溢出的嚴重安全性問題)
// C style
// char *dum = malloc(strlen(InstList->Lines->Text.c_str())+1);
// BCB style...
char *dum = malloc(InstList->Lines->Text.Length()+1);
// BEWARE: AFTER any malloc you should check the pointer returned for being NULL
strcpy(dum,InstList->Lines->Text.c_str());
編輯-根據評論:
我假設您使用的仍然是AnsiString
BCB舊版本-如果在較新的UnicodeString
版本UnicodeString
則該代碼可能會導致“奇怪的結果”,因為Unicode字符串每個字符占用多個字節(取決於編碼等)。 )。
char dum[32]; strcpy(dum,InstList->Lines->Text.c_str());
不要使用char*
來代替String
或std::string
,如果出於某種原因需要指向字符串的指針,只需從字符串對象中獲取即可。
String myString = InstList->Lines->Text;
myString.c_str();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.