Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std:string到char的转换*_C++_C++builder_Rad Studio - Fatal编程技术网

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-只是“奇怪的设计”:-)