Char数组在初始化时出错

时间:2012-02-05 14:18:41

标签: c++

这可能很简单,但我是关于c ++的新篇章 在char数组中,我们可以让编译器计算字符串中的字符数,如

char myarray[]="stringvar";

没关系,但是如果我改变下面的代码,编译器会给出错误

string myvar = "stringvar";
char myarray[] =myvar;

error: initializer fails to determine size of myarray


那是为什么?

4 个答案:

答案 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();

但无论如何,这不是个好主意,直​​到你肯定知道自己在做什么。