Char数组在初始化时出错
Char array gives error when initializing
这可能很简单,但我对c++很陌生
在char数组中,我们可以让编译器像一样计算字符串中的字符数
char myarray[]="stringvar";
可以,但如果我按照下面的方式更改代码,编译器会给出错误
string myvar = "stringvar";
char myarray[] =myvar;
error: initializer fails to determine size of myarray
为什么?
您可以这样做:
string myvar = "stringvar";
const char * myarray = myvar.c_str(); //immutable string
在这种情况下,myarray
所指向的数据的寿命与myvar
的寿命一样长。
但是,如果您想要一个可变的字符串,或者一个可能比myvar
的寿命更长(或更短)的字符串,那么您必须自己将内存分配为:
char * myarray = new char[myvar.size()+1]; //mutable string
std::strcpy(myarray, myvar.c_str());
//you've to deallocate the memory yourself as:
delete [] myarray;
不能为std::string
对象分配初始化和创建字符数组。
您需要将std::string
复制到阵列中。
strcpy(myarray,myvar.c_str());
存在错误,因为char myarray[]
等效于char* myarray
。它只是一个指向char的指针。因此,您需要一个兼容的初始值设定项(如char*
或const char*
)。但是您正在尝试传递string
类的实例,该实例不是指针。
如果你想把myarray分配给一个字符串(使它指向同一位置),你可以这样做
char myarray[] = const_cast<char[]> myvar.c_str();
但无论如何,在你明确知道自己在做什么之前,这不是一个好主意。
string myvar = "stringvar"
char* myarray = (char*)myvar.c_str();
它应该起作用。
相关文章:
- 为什么我在初始化带大括号的结构时出错?
- 使用根/C++时出错:没有匹配的构造函数来初始化'TTree'
- 尝试初始化结构内的联合时出错
- 将初始化的矢量作为引用传递时出错
- 使用编译器进行外部初始化时出错C++
- 向模板化静态成员初始化添加和不添加'typename'都会出错
- 在旧的 c++ (<c++11) 中,初始化结构会出错
- 从模板类初始化对象时出错.参考类模板实例化
- 可变大小的对象可能无法初始化 尽管初始化了,但出错
- 初始化地图时出错
- 非常量引用类型的无效初始化中出错.在Linux操作系统中使用c++代码.GCC编译器
- 初始化映射时出错
- 在c++中初始化构造函数中的静态成员变量时出错
- 初始化动态分配的数组时出错
- C2057构造函数初始化列表中的常量值定义出错
- 初始化my数组时出错
- C++中的初始化结构出错
- 初始化 JVM 时出错
- 初始化类型的非常量引用无效时出错
- 类型'int&'的引用初始化无效,传递参数 1 时出错