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

Templates. adding , getting element char*

本文关键字:char 元素 获取 添加 模板      更新时间:2023-10-16

我有一个问题与我的模板类和使用它的char*。在类中存储元素并尝试添加或获取元素,但出现分段错误。有没有可能对char*类型不进行类特化?

编辑1:让我们假设我不能改变main函数中的代码,只能改变类和方法,但没有特化。有可能处理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;
}
代码

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

在现代c++中,该程序甚至不应该编译,因为从字符串字面值到非const char*的废弃转换最终在c++ 11中被禁止。

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