这可能很简单,但我是关于c ++的新篇章 在char数组中,我们可以让编译器计算字符串中的字符数,如
char myarray[]="stringvar";
没关系,但是如果我改变下面的代码,编译器会给出错误
string myvar = "stringvar";
char myarray[] =myvar;
error: initializer fails to determine size of myarray
那是为什么?
答案 0 :(得分:4)
你可以这样做:
string myvar = "stringvar";
const char * myarray = myvar.c_str(); //immutable string
在这种情况下,myarray
指向的数据与myvar
的生命周期一样长。
但是,如果你想要一个 mutable 字符串,或者一个可能比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;
答案 1 :(得分:1)
您无法指定std::string
对象来初始化和创建字符数组。
您需要将std::string
复制到数组中。
strcpy(myarray,myvar.c_str());
答案 2 :(得分:1)
string myvar = "stringvar"
char* myarray = (char*)myvar.c_str();
它应该有用。
答案 3 :(得分:1)
有错误,因为char myarray[]
相当于char* myarray
。它只是一个指向char的指针。因此,您需要兼容的初始值设定项(例如char*
或const char*
)。但是你试图传递string
类的实例,这不是指针。
如果您希望将myarray分配给字符串(使其指向同一位置),您可以这样做
char myarray[] = const_cast<char[]> myvar.c_str();
但无论如何,这不是个好主意,直到你肯定知道自己在做什么。