我有来自其他公司的C ++ dll。有一个字符串和方法的方法msg参数,void methodA(string& msg);
我现在拥有的是一个char *,其长度足以从methodA获取msg。我想调用methodA从methodA获取消息。
我可以这样做吗?怎么样? 感谢,
答案 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 }
}