模板。添加,获取元素 char*

Templates. adding , getting element char*

我的模板 class 将其用于 char* 时遇到问题。 我在 class 中存储元素并尝试添加或获取元素,但出现分段错误。 如果没有 class 类型 char* 的专门化,是否有可能?

编辑 1: 假设我不能更改 main 函数中的代码,只能更改 class 和方法,但没有专门化。是否可以处理 char* ? ;)

#include <iostream>
#include <vector>
using namespace std;

template<class T>
class test
{
public:
    void addItem(T element){
        elements.push_back(element);
    }

    T getItem(int i){
        return elements[i];
    }

    vector<T> elements;
};

int main()
{
    char * cpt[]={"tab","tab2","tab3"};
    test<char*> test1;
    test1.addItem(cpt[1]);
    char * item=test1.getItem(0);
    //Segmentation fault
    // could it be done without specialisation class for char*    ?
    item[0]='Z';
    cout<<item<<endl;
    for(auto v:test1.elements) cout<<v<<endl;
    return 0;
}

My code

您正在尝试修改常量字符串文字。这给出了未定义的行为;如果文字存储在写保护内存中,通常是分段错误。

在现代 C++ 中,该程序甚至不应该编译,因为从字符串文字到非常量 char* 的弃用转换最终在 C++11 中被禁止。

如果要存储可修改的字符串,最好使用 std::string