我正在尝试在程序中获取字符串的大小,因此我可以稍后使用循环将其转换为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,创建一个记事本程序。
答案 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
。