#include <iostream>
#include <string>
int main(void)
{
std::cout << "Please enter your name: ";
std::string name;
std::cin >> name;
std::cout << std::endl;
std::cout << "Your name is " << name << "." << std::endl;
std::cout << "The size of '" << name << "' in bytes is " << sizeof(name)
<< "." << std::endl;
std::cin.get();
std::cin.get();
return 0;
}
每当我运行这个程序,并为变量'name'输入一个字符串时,它总是会输出变量的大小是32个字节。对于四个或五个字符的名称来说,这似乎相当大。是否与O / I流有关?或者它是否与字符串类中的某些内容有关?我是C ++的新手,所以感谢任何帮助。感谢。
请输入你的名字:Jake
你的名字是杰克。 'Jake'的大小以字节为单位。
答案 0 :(得分:6)
sizeof
是一个编译时运算符,它返回对象表示的字节大小,即内存中布局的大小。它与std::string
内容无关。
改为使用string.size()
。
答案 1 :(得分:3)
std::string
由两部分组成:
当您访问sizeof(name)
时,您将获得固定“锚点”部分的大小。如果您想查找长度,请致电name.length()
或name.size()
。如果您想知道字符串足迹的近似下限,请添加sizeof(name) + name.size() + 1
。实际足迹可能更大,因为动态部分可能具有比实际使用的更多的空间。在一些实现中,完全适合std::string
的固定部分的非常短的字符串的覆盖区可以等于sizeof(name)
。