恒定字符串如何在C 中起作用

How do constant strings work in C++

本文关键字:起作用 字符串      更新时间:2023-10-16

我有这样的代码:

class temp {
private :
    char * name;
public :
    temp(char * temp_name){
        strcpy(name,temp_name);
    cout << "Created"<<name<<endl;
    }
    ~temp(){
        cout<< "Destoyed"<<name<<endl;
    }
};
int main() {
class temp person1("Jack");
class temp haha("Katy");
    return 0;
}

我期望有两个单独的级别临时实例(杰克和凯蒂(。所有的构造函数和破坏者都可以正常工作。但是,我得到了如此奇怪的输出:

Create Jack

用退出代码11

完成的过程

我很确定问题在构造函数温度(char * temp_name(中有常数字符串,但无法弄清楚。

所以我的问题是,您能否解释在内存方面,在这种情况下,我无法创建2个类临时的实例?

您需要分配足够大小的缓冲区以包含传递的字符串数据并用指向此缓冲区的指针初始化name。现在,您正在删除非初始化的指针name获得不确定的行为。

此外,此代码甚至都不会编译,因为您试图将字符串字面的字体传递到构造函数中,希望指向非CONST合格char的指针。您很可能正在使用相当长的时间允许这种不合格行为的Visual Studio。从VS2017开始,您应该使用/permissive-编译以执行一致性。并将构造函数签名更改为

temp(char const * const temp_name)