string ::容量/储备()计数终止null
Does string::capacity/reserve() count terminating null?
从 capacity()
和 reserve()
上的CPPREF描述中不明显,是否终止null字符。
标准指出:
在所有情况下,
size() <= capacity()
。
和size()
不包括终止空的null。
由于size()
可能等于capacity()
,因此,在这种情况下,这意味着capacity()
也不计算终止null。
请注意,在C 11及以后,mystring.c_str()
等于mystring.data()
等于&mystring[0]
,并且mystring[mystring.size()]
保证为' '
。
检查此 demo 。
标准对此是不可交接的。basic_string
的文档中甚至都没有提到NULL字符。
在许多成员功能的文档中,提到:
容量()一个值至少与大小()
一样大的值
但是,没有什么可以说capacity()
必须比size()
大得多。
这是一个示例程序,表明resize()
和capacity()
既不知道终止空字符的任何知识。
#include <iostream>
#include <string>
int main()
{
std::string s1(10, 'a');
std::cout << "size: " << s1.size() << std::endl;
std::cout << "capacity: " << s1.capacity() << std::endl;
std::string s2;
s2.resize(5);
s2[0] = 'a';
s2[1] = 'b';
s2[2] = 'c';
s2[3] = 'd';
s2[4] = 'e';
std::cout << "size: " << s2.size() << std::endl;
std::cout << "capacity: " << s2.capacity() << std::endl;
std::string s3("abcd");
std::cout << "size: " << s3.size() << std::endl;
std::cout << "capacity: " << s3.capacity() << std::endl;
}
在我的笔记本电脑上使用g++ --std=c++14
输出:
size: 10
capacity: 10
size: 5
capacity: 5
size: 4
capacity: 4
相关文章:
- 如何告诉字符串流忽略null终止字符
- 是否有一种安全的方法可以断言字符串视图是否以 null 终止?
- 自动截断和 null 终止缓冲区溢出中的字符串缓冲区
- 用户定义的字符串文字为字符串null终止
- 为什么具有单独字符的字符数组不像字符串文字那样以 null 终止符结尾?
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- Node-ffi 绑定到 NULL 终止的 C 字符串数组,但得到“分段错误:11”
- 为什么一个指向char的C++指针在缺少null终止符的情况下充当字符串
- 为 fstream 添加 NULL 终止符
- Winsock2 tcp/ip-一些数据包被忽略,可能是由于前一个数据包的null终止符
- 解密字符串末尾的 NULL 终止符需要什么?
- 字符串中的Null终止
- 将 char 数组作为参数传递时,为什么索引中不包含 null 终止符?
- Delphi - 从 dll 调用转换(读取)C++ NULL 终止数组
- 如何捕获不包含 null 终止符的字符串的错误
- C++字符数组null终止符位置
- 字符串不是null终止错误
- 使用字符数组(非null终止)c/c++写入stdout
- 初始化char数组以容纳非null终止的字符串
- C++字符数组正确移动null终止符