如何用string&调用方法参数使用char *?

时间:2010-06-22 22:41:26

标签: c++ visual-c++

我有来自其他公司的C ++ dll。有一个字符串和方法的方法msg参数,void methodA(string& msg);

我现在拥有的是一个char *,其长度足以从methodA获取msg。我想调用methodA从methodA获取消息。

我可以这样做吗?怎么样? 感谢,

4 个答案:

答案 0 :(得分:4)

#include <algorithm>

void foo(char* buffer)
{
    std::string str;
    methodA(str);
    std::copy(str.begin(), str.end(), buffer);
    buffer[str.size()] = 0;
}

答案 1 :(得分:3)

听起来你需要使用这样的模式。目前还不清楚参数是输入/输出还是简单输出参数。所以你需要其中一个......

<强> IN / OUT:

const char s[BIG_ENOUGH] = "whatever";
std::string str(s);
methodA(str);
// str should now have the response according to your API description

<强> OUT:

std::string str;
methodA(str);
// str should now have the response according to your API description

// if you need to result in `s`...
strncpy(s, str.c_str(), BIG_ENOUGH);
s[BIG_ENOUGH - 1] = '\0'; // just to be safe

答案 2 :(得分:2)

从char *中创建一个字符串并将其传递给methodA。我就是这样做的。

不确定你在这里寻找什么。

注意:哦,我明白了。花了我一会儿。

std::string my_msg;
methodA(my_msg);
strcpy(my_char_star, my_msg.c_str());

我必须说这基本上与您应该编写的代码类型完全相反。您应该使用std :: string或std :: vector来提供char * buffer参数,而不是char *来替换std :: string。

答案 3 :(得分:1)

是的,你可以。

#include <string>

void yourfunc( char * mymsg, int len ) {
  string msg;
  methodA(msg);
  if( msg.length() < len ) {
    strncpy( mymsg, msg.c_str(), len );
  } else { // FAIL }
}