微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将std:string转换为char *

如何解决将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()));

或者,您可以将resultstd::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 举报,一经查实,本站将立刻删除。