1
char *dum[32];
strcpy(&dum,InstList->Lines->Text.c_str());

InstList是一个TMemoC++ Builder

为什么我会收到此错误?

[C++ 错误] emulator.cpp(59): E2034 Cannot convert 'char * *' to 'char *' Full parser context emulator.cpp(56): parsing: void _fastcall TMain::Button1Click(TObject *)

4

4 回答 4

2
char *dum[32];

是一个长度为 32 的数组,每个元素是一个char*. 我猜你是想写

char dum[32];

这是一个 32 个字符的数组,然后您可以编写:

strcpy(dum, InstList->Lines->Text.c_str());

当然,请确保InstList->Lines->Text它不会太大以至于溢出缓冲区。

当然,我不确定为什么需要在 C++ 程序中使用 C 字符串。

于 2011-10-29T11:49:49.117 回答
2

您要么使用(容易出现称为缓冲区溢出的严重安全问题)

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());

编辑 - 根据评论:

我假设您使用的是旧的 BCB 版本,它仍然有AnsiString- 如果这是在较新的版本上,UnicodeString那么代码可能会导致“奇怪的结果”,因为 unicode 字符串每个字符占用多个字节(取决于编码等)。

于 2011-10-29T11:51:07.123 回答
1
字符杜姆[32];   
strcpy(dum,InstList->Lines->Text.c_str());
于 2011-10-29T11:49:26.130 回答
1

不要使用char*use Stringorstd::string代替,如果您出于某种原因需要指向字符串的指针,只需从字符串对象中获取它即可。

String myString = InstList->Lines->Text;
myString.c_str();
于 2011-10-29T12:01:54.197 回答