如何在C ++中将const char []转换为char *

时间:2018-08-03 09:02:21

标签: c++

我编译了非常简单的代码,但无法编译此代码。

#include <iostream>

using namespace std;

class String {
    char *str;
public:
    String(char *);
    ~String();
    char *get() { return str; }
};

String::String(char *p)
{
    cout << " ! constructor\n";
    str = new char[strlen(p) + 1];
    strcpy(str, p);
}

String::~String()
{
    cout << " ! destructor\n";
    delete str;
}

void show1(String &s)
{
    cout << "show1 : " << s.get();
}
void show2(String s)
{
    cout << "show2 : " << s.get();
}
int main()
{
    char *str = "C++ Language";
    String ss(str);

    show1(ss); cout << endl;
    show2(ss); cout << endl;

    return 0;
}

错误,说不能将const char [13]转换为char *。 如何编译此代码? 我用Visual Studio编译它。

3 个答案:

答案 0 :(得分:1)

由于您只想读取字符串,因此希望它是const。更改

String::String(char *p)
    ...
char *str = "C++ Language";

String::String(const char *p)
    ...
const char *str = "C++ Language";

答案 1 :(得分:1)

字符串常量是恒定的,不应修改,较早的编译器可能允许将它们分配给char *,而更现代的编译器将仅允许分配给const char*(或const char[]),例如这应该编译:

const char *str = "C++ Language";

即使编译器允许分配给char *,在尝试修改字符串文字时,也应始终使用const char*来防止难以跟踪的崩溃。

答案 2 :(得分:-2)

为strlen和strcpy包含string.h