模板.添加,获取元素char*
Templates. adding , getting element char*
我有一个问题与我的模板类和使用它的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
。
相关文章:
- 使用strcpy将char数组的元素复制到另一个数组
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- 常量数组如何在每个元素中只能包含字符,而 char* 数组能够指向每个元素中的字符串?
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- C++函数返回两个 char 数组的相同索引元素
- 无法获取已填充堆栈<char>的顶部元素
- 访问函数中 const char *arr[] 的元素
- 有没有办法比较用 int 初始化的 char 类型的数组的 2 个元素
- 班级的char*元素是空的
- C++:如何将 char 变量分配给向量<char>并访问该向量的元素进行比较?
- 将双插入char*数组元素中
- c ++ 我的 char* 数组被最后一个添加的元素覆盖
- 改变vs中持续char*的元素
- 使用 char **,其中新元素覆盖以前的元素
- 如何在C中获取char阵列的第一个X元素?提升效果是否有改进的方法
- 使用for循环将char数组的一个元素复制到另一个元素
- 如何设置变量的 char 数组的元素数量
- std::string 或 char[] 作为大型数组状结构的元素
- 将整数值分配给 char 数组元素
- 获取数组中char元素的索引