0

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

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

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

theFileName = "C:\Users\Vincent\Desktop\Untitled.txt"

这个尺寸:

大小 = 32

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

4

5 回答 5

2

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

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

于 2013-11-03T21:49:21.523 回答
1

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

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

于 2013-11-03T21:46:47.543 回答
1

内容的大小由

theFileName.size()

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

于 2013-11-03T21:46:59.107 回答
0

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

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

于 2013-11-03T22:34:08.487 回答
0

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

于 2013-11-03T21:46:15.757 回答