c++中的sizeof显示字符串大小少一个
sizeof in c++ showing string size one less
在C++中,我试图获得string
的大小,比如"gibbs";
当我使用sizeof
函数时,它返回的大小小于实际大小的一。
我有以下代码:
string s = "gibbs";
cout << sizeof(s) <<endl;
输出为:4。我想应该是5。
如何解决此问题。我们可以总是在sizeof的返回中添加+1,但这会是完美的解决方案吗?
sizeof(s)
提供对象s
的大小,而不是存储在对象s
中的字符串的长度。
你需要写这个:
cout << s.size() << endl;
注意,std::basic_string
(以及扩展为std::string
)具有size()
成员函数。std::basic_string
还有一个length
成员函数,它返回与size()
相同的值。所以你也可以这样写:
cout << s.length() << endl;
我个人更喜欢size()
成员函数,因为标准库中的其他容器,如std::vector
、std::list
、std::map
等,都有size()
成员函数,但没有length()
。也就是说,size()
是标准库容器类模板的统一接口。我不需要专门为std::string
(或任何其他容器类模板)记住它。成员函数CCD_ 20在这个意义上是一个偏差。
sizeof(s)
在您的示例中返回std::string
的大小,与其成员指向的内容无关。
如何解决此问题。我们可以总是在sizeof的返回中添加+1,但这会是完美的解决方案吗?
不,这不会解决任何问题,因为值是常量,并且sizeof
没有提供您期望的值。
如果您想知道字符串的字符序列所需的字符数,可以使用s.length()
或s.size()
——在该值上加1来知道终止字符串所需的大小。
还要注意,sizeof
的值不会在库和平台之间保持一致。CCD_ 27的实现方式可能有很大差异。特别是,您可能会看到指针大小的差异,也可能会看到小字符串优化。
因为这是系统中字符串类型的大小,而不是底层数据的大小。例如:
#include <iostream>
int main (void) {
std::string s1 = "gibbs";
std::string s2 = "a much longer string";
std::cout << sizeof(s1) << 'n';
std::cout << sizeof(s2) << 'n';
std::cout << s1.length() << 'n';
std::cout << s2.length() << 'n';
return 0;
}
生产:
4
4
5
20
换句话说,您应该使用std::string::length()
来获取字符串的长度。
sizeof
返回对象类型std::string
的大小,在您的系统中恰好是4
。这可能是因为您正在处理的std::string
的实现使用了pimpl习惯用法,即它只包含一个指向您正在查找的实际实现的指针,而指针在您的主机环境中恰好是32位的。不过,更有可能的是,您使用的是std::string
的写时复制实现,它不再符合C++11标准的规范。
std::string
被定义为std::basic_string
模板类,特别是std::basic_string<char>
的专门化;您应该查看std::basic_string
上的文档。看看CCD_ 38和CCD_。
std::string s = "stackoverflow";
std::assert(s.size() == 13);
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- 内联函数,等于 "sizeof expression" ,但返回一个有符号值
- 只有当声明一个对象时,内存空间才会分配给类的数据成员,那么为什么 Sizeof(class_name) 给我结果
- 如果 T 是一个函数,则不要对 T 使用 sizeof
- 两种模板类型的sizeof,当两者都是从一个基派生时
- c++中的sizeof显示字符串大小少一个
- 为什么sizeof为一个字符显示4个字节
- 当我试图找出字符串的长度时,Sizeof是一个负数
- strlen()和sizeof()之间有一个奇怪的区别
- 为什么 sizeof( "string" ) 打印的长度比 "string" 的长度多一个?
- sizeof可以应用于未捕获的变量的lambda内部吗?还是这是一个编译器错误?
- DevC++上出现了一个奇怪的sizeof()错误
- sizeof(void()) 是一个合法的表达吗?
- c++数组的Sizeof()在一个函数中起作用,但在另一个函数中不起作用