簡體   English   中英

C ++ Borland char *和strcpy

[英]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*來代替Stringstd::string ,如果出於某種原因需要指向字符串的指針,只需從字符串對象中獲取即可。

String myString = InstList->Lines->Text;
myString.c_str();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM