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遍。