如何解决将std:string转换为char *
我正在尝试转换通过执行一些数据操作而获得的result
字符串,例如:
std::string result = std::string(/* num_max */,'0').append(myDataModule->getId().c_str());
我从getId()
上的AnsiString
(返回一个TDataModule
)获得一个ID,并使用std::string
将其转换为AnsiString::c_str()
,并且在左边加上零(剩余的空格)到我的result
字符串中。
我需要在接收result
的函数中使用char *
的值:
void receiver(char * data,int num){
... <- A lot of code here
if( data != NULL )
{
strcpy( rdData,data); <-- rdData is an char *
...
}
}
基本上,此功能会将data
复制到rdData
并进行一些验证。
候选函数不可行:第一个参数没有从'std :: string'(aka'basic_string')转换为'char *'的已知转换
解决方法
运行代码时,调用此函数会出现错误:
候选函数不可行:第一个参数没有从'std :: string'(aka'basic_string')转换为'char *'的已知转换
您没有显示试图将std::string
传递给receiver()
函数的实际代码,但是错误消息非常清楚。您根本无法直接将std::string
分配给非常量char*
,这正是编译器所抱怨的。
但是,您可以使用const char*
的{{1}}方法从std::string
获得c_str()
,然后可以将const_cast
转换为char*
(只要因为该函数不会尝试修改char
数据),例如:
std::string result = ...;
receiver(const_cast<char*>(result.c_str()),static_cast<int>(result.size()));
或者,您可以直接使用&result[0]
(在C ++ 11和更高版本中保证是连续的并且以null终止),或者可以在C ++ 17和更高版本中使用result.data()
稍后,例如:
std::string result = ...;
receiver(&result[0]/*result.data()*/,static_cast<int>(result.size()));
或者,您可以将result
从std::string
更改为AnsiString
,因为其c_str()
方法返回非常量char*
,例如:>
AnsiString result = AnsiString::StringOfChar('0',8) + myDataModule->getId();
receiver(result.c_str(),result.Length());
无论哪种方式,如果receiver()
仅需要从data
中读取而无需修改其内容,则应 将其更改为将data
作为{而是使用{1}}(特别是因为strcpy()
总是如此),例如:
const char*
然后,无论void receiver(const char * data,int num)
是result.c_str()
还是result
,您都可以按原样使用AnsiString
,而不会费劲。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。