C++ 当字符串有26个字符时,为什么sizeof(str)是8?
我创建了以下数组:C++ 当字符串有26个字符时,为什么sizeof(str)是8?,c++,C++,我创建了以下数组: char* myarr= "data successfully inserted"; 当我这样做的时候 sizeof(myarr) 我得了8分。为什么我会这样?。如果1个字符是1字节,那么通过正确计算字符数,myarr的大小应该是26?在您的平台上,char指针是8字节。这是指针变量的大小,而不是它指向的任何对象的大小。如果需要字符串的长度,请调用strlen(myarr),因为这是系统上指针的大小。如果要获取字符串的长度,应使用strlen()函数。sizeof(my
char* myarr= "data successfully inserted";
当我这样做的时候
sizeof(myarr)
我得了8分。为什么我会这样?。如果1个字符是1字节,那么通过正确计算字符数,myarr的大小应该是26?在您的平台上,
char
指针是8字节。这是指针变量的大小,而不是它指向的任何对象的大小。如果需要字符串的长度,请调用strlen(myarr),因为这是系统上指针的大小。如果要获取字符串的长度,应使用strlen()
函数。sizeof(myarr)
不是字符串的大小,而是平台上提供8字节的char*pointe
r的大小。数组的大小可以通过strlen(myarr)
计算,因为您得到的是指针的大小。您应该将其声明为char[]myarray=“data successfully inserted”
,这将节省8字节的空间。如果表达式e
的类型为T
,sizeof(e)
相当于sizeof(T)
。给定类型的所有对象都具有相同的大小。因为您正在滥用sizeof
,并且应该首先使用std::string
,只有在确实需要时才使用原始字符数组。只需执行std::string mystr=“…”
并使用mystr.size()
,而不是“给定类型的所有对象都具有相同的大小”。你应该在黑板上写100遍。