C++ std:string到char的转换*
我正在尝试转换一个C++ std:string到char的转换*,c++,c++builder,rad-studio,C++,C++builder,Rad Studio,我正在尝试转换一个结果字符串,该字符串是通过执行一些数据操作获得的,例如: std::string result = std::string(/* num_max */, '0').append(myDataModule->getId().c_str()); 我从我的TDataModule上的getId()(它返回一个AnsiString)获取一个id,使用AnsiString::c_str()将其转换为std::string,并在我的结果字符串的左边加上一个零(保留的空格) 我需要在接
结果
字符串,该字符串是通过执行一些数据操作获得的,例如:
std::string result = std::string(/* num_max */, '0').append(myDataModule->getId().c_str());
我从我的TDataModule
上的getId()
(它返回一个AnsiString
)获取一个id,使用AnsiString::c_str()
将其转换为std::string
,并在我的结果
字符串的左边加上一个零(保留的空格)
我需要在接收char*
的函数中使用result
的值:
void接收器(字符*数据,整数){
...
运行代码时,调用此函数时出现错误:
候选函数不可行:第一个参数没有从“std::string”(也称为“basic_string”)到“char*”的已知转换
您没有显示试图将std::string
传递给receiver()
函数的实际代码,但错误消息非常清楚。您无法将std::string
直接分配给非常量char*
,这正是编译器所抱怨的
但是,您可以使用c_str()
方法从std::string
获取const char*
,然后您可以const\u cast
将其转换为char*
(只要函数不尝试修改char
数据),例如:
std::字符串结果=。。。;
接收器(const_cast(result.c_str())、静态_cast(result.size());
或者,您可以简单地使用&result[0]
(在C++11及更高版本中保证是连续的且以null结尾),或者您可以在C++17及更高版本中使用result.data()
,例如:
std::字符串结果=。。。;
接收器(&result[0]/*result.data()*/,静态_转换(result.size());
或者,您可以简单地将result
从std::string
更改为ansisting
,因为它的c\u str()
方法返回一个非常量char*
,例如:
AnsiString result=AnsiString::StringOfChar('0',8)+myDataModule->getId();
接收方(result.c_str(),result.Length());
无论哪种方式,如果receiver()
只需要读取数据
而不需要修改其内容,则应将其更改为将数据
作为常量字符*
(尤其是因为这是预期的),例如:
void接收器(常量字符*数据,整数)
然后你可以按原样使用result.c_str()
,不要耍花招,无论result
是一个AnsiString
还是一个std::string请发布一个。如果myDataModule->getId()
的结果是一个std::string
,那么我就不能重新编写这个:你在找什么?getId()的返回类型是什么
?对不起,我忘记发布了,我编辑了问题,添加了返回类型getId()
。必须问…你怎么能发布一个封闭式问题的答案?时间线上说是。17分钟前就关闭了。12分钟前发布了答案。@4386427系统一定很喜欢我;-)哦,等等,这不是那个,看,奇怪-一定是个错误。无论如何-非常确定你的答案是正确的,但不能真正知道,因为OP刚刚消失并停止了wering评论:-(哇-我不知道那个“宽限期”大约是4个小时。所以这不是一个bug-只是“奇怪的设计”:-)