从'const char *'到'char *的无效转换

时间:2014-06-08 21:39:32

标签: c++

我在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);

3 个答案:

答案 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;
}

http://ideone.com/ZY6Atr