c ++ sizeof()没有返回正确的大小

时间:2013-11-03 21:42:48

标签: c++ string sizeof

我正在尝试在程序中获取字符串的大小,因此我可以稍后使用循环将其转换为char,但程序返回的大小是5个数字小于实际大小。为什么会发生这种情况?

std::string theFileName = fileNames[ curTab ];
int size = sizeof( theFileName );

调试程序时,它会将其存储在文件名:

theFileName =“C:\ Users \ Vincent \ Desktop \ Untitled.txt”

这个大小:

size = 32

如果计算文件名中的字符,实际上是37。导致这种情况发生的原因是什么?我正在使用MS Visual C ++ 2010 Express,创建一个记事本程序。

5 个答案:

答案 0 :(得分:2)

sizeof告诉您数据结构的大小及其所有成员数据。但是,字符串对象通常会将字符串数据存储在堆上 - 即它不是成员数据,但对象拥有它并存储指向它的指针。

获取字符串对象大小的正确方法是调用size()length()成员函数。

答案 1 :(得分:1)

std::string不是字符数组。是由std::string对象管理的动态数组。 sizeof返回指定数据类型的大小,在string的情况下,指向数组的指针加上一定数量的静态分配的字符(这是常见的字符串优化)。

你应该使用的是内置函数size(),它返回字符串的长度。

答案 2 :(得分:1)

内容的大小由

确定
theFileName.size()

sizeof返回对象std::string的大小。例如,该对象可以包含指向内容位置的指针和表示长度的无符号整数。因此sizeof将包含一个指针和无符号整数的大小。如果您更改内容,这不会改变。

答案 3 :(得分:0)

std :: string对象的大小与其包含的字符串的大小无关。使用为此目的提供的std :: string成员函数。

答案 4 :(得分:0)

sizeof用于计算以字节为单位测量的任何数据类型的大小。

您必须在程序中使用的功能是size