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 *)
答案 0 :(得分:2)
char *dum[32];
是一个长度为32的数组,每个元素都是char*
。我想你打算写
char dum[32];
这是一个32字符的数组,然后你可以写:
strcpy(dum, InstList->Lines->Text.c_str());
当然,请确保InstList->Lines->Text
不是那么大,以至于溢出缓冲区。
当然,我不确定为什么你需要在C ++程序中使用C字符串。
答案 1 :(得分:2)
您要么使用(容易出现严重的安全问题,称为缓冲区溢出)
char dum[32];
strcpy(dum,InstList->Lines->Text.c_str());
OR(更好,因为它适用于任何长度而不会出现称为缓冲区溢出的严重安全问题)
// 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());
编辑 - 根据评论:
我假设您使用的旧BCB版本仍然有AnsiString
- 如果这是在较新版本UnicodeString
上,则代码可能导致“奇怪的结果”,因为unicode字符串占用每个字符多个字节(取决于编码等)。
答案 2 :(得分:1)
char dum[32]; strcpy(dum,InstList->Lines->Text.c_str());
答案 3 :(得分:1)
请勿使用char*
使用String
或std::string
,如果由于某种原因需要指向字符串的指针,请从字符串对象中取出。
String myString = InstList->Lines->Text;
myString.c_str();