Char数组在初始化时出错

Char array gives error when initializing

本文关键字:出错 初始化 数组 Char      更新时间:2023-10-16

这可能很简单,但我对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();

它应该起作用。