在C++中,我试图获得一个string说"gibbs"的大小;
当我使用sizeof函数时,它返回的尺寸小于实际尺寸的尺寸.
我有下面的代码:
string s = "gibbs";
cout << sizeof(s) <<endl;
Run Code Online (Sandbox Code Playgroud)
输出是:4.我想它应该是5.
如何解决这个问题.我们可以添加+1总是返回sizeof,但这是完美的解决方案吗?
sizeof(s)为您提供对象的大小s,而不是对象中存储的字符串的长度s.
你需要写这个:
cout << s.size() << endl;
Run Code Online (Sandbox Code Playgroud)
请注意std::basic_string(并且通过扩展名std::string)具有size()成员函数.std::basic_string还有一个length成员函数,返回相同的值size().所以你也可以这样写:
cout << s.length() << endl;
Run Code Online (Sandbox Code Playgroud)
我个人比较喜欢的size()成员函数,因为标准库中的其他容器,如std::vector,std::list,std::map,等,有size()成员函数而不是length().也就是说,它size()是标准库容器类模板的统一接口.我不需要专门为它std::string(或任何其他容器类模板)记住它.成员函数std::string::length()是这种意义上的偏差.
sizeof(s)在您的示例中返回 的大小std::string,与其成员指向的内容没有关系。
如何解决这个问题。我们可以总是在 sizeof 的返回值上添加+1,但这会是完美的解决方案吗?
不,这不会解决任何问题,因为该值是恒定的,并且sizeof没有提供您期望的值。
如果你想知道字符串的字符序列所需的字符数,可以使用s.length()或s.size()--将该值加1来知道终止字符串所需的大小。
另请注意, 的值sizeof在库和平台之间不会保持一致。std::string实施方式可能会有很大差异。特别是,您可能会看到指针大小的差异,并且可能会看到小字符串优化。