我在C ++方面没有太多经验。我有一个函数std::string Exec(char* cmd)
。它运行cout<<Exec("hello!")
,但它不会运行std :: string:从'const char *'到'char *的无效转换。我想知道如何解决它。
std::string s="hello";
char * c = s.c_str();
Exec(c);
答案 0 :(得分:3)
那是因为c_str()
返回const char *
而不是char *
只需将该行更改为:
const char * c = s.c_str();
和
的函数声明std::string Exec(const char* cmd)
如前所述,你很高兴。 See it live here.
答案 1 :(得分:0)
您需要将原型更改为:
std::string Exec(const char* cmd)
因为您想传递const char*
作为参数。
否则,您可以传递char*
作为参数。
这就是你的cout<<Exec("hello!")
工作的原因,因为参数是以非const形式传递的!
答案 2 :(得分:0)
您尝试做的正确签名将是
std::string Exec(const char* cmd)
因为在任何一种情况下你都会将字符串常量传递给它。即使Exec("hello")
案例编译,也不意味着它可以安全使用:
#include <iostream>
using namespace std;
std::string Exec(char* cmd) {
cout << cmd;
cmd[0] = 'S'; // Undefined behavior
cout << cmd;
return std::string("");
}
int main() {
Exec("hello");
return 0;
}