C++ Borland char * 和 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];
strcpy(&dum,InstList->Lines->Text.c_str());
InstList
is a TMemo
of C++ Builder
Why am I getting this error?
[C++ Error] emulator.cpp(59): E2034 Cannot convert 'char * *' to 'char *'
Full parser context
emulator.cpp(56): parsing: void _fastcall TMain::Button1Click(TObject *)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
是一个长度为 32 的数组,每个元素都是一个
char*
。我猜你的意思是写This is an array of 32 char 然后你可以写:
当然,确保
InstList->Lines->Text
不会太大以至于溢出你的缓冲区。当然,我不确定为什么需要在 C++ 程序中使用 C 字符串。
is an array of length 32, each element being a
char*
. I guess you meant to writeThis is an array of 32 char and you can then write:
Make sure, of course,
InstList->Lines->Text
is not so big that it overflows your buffer.Of course, I'm not sure why you would need to use C strings in a C++ program.
您可以使用(容易出现称为缓冲区溢出的严重安全问题)
或(更好,因为它适用于任何长度,而不会容易出现称为缓冲区溢出的严重安全问题)
<强>编辑 - 根据评论:
我假设您使用的是较旧的 BCB 版本,该版本仍然具有
AnsiString
- 如果这是在较新版本上UnicodeString< /code> 那么代码可能会导致“奇怪的结果”,因为 unicode 字符串每个字符占用多个字节(取决于编码等)。
You either use (prone to serious security problem called buffer overflow)
OR (much better since it works with any length without being prone to a serious security problem called buffer overflow)
EDIT - as per comments:
I am assuming that you are using an older BCB version which still has
AnsiString
- if this is on a newer versionUnicodeString
then the code could lead to "strange results" since unicode string take up multiple bytes per character (depending on the encoding etc.).不要使用
char*
使用String
或std::string
相反,如果您出于某种原因需要指向字符串的指针,只需从你的字符串对象。Do not use
char*
useString
orstd::string
instead and if you need a pointer to your string for some reason just take this from your string object.