C++ 的string最多能容纳多少个字符

clayXmore 2012-05-06 06:33:38
如题!
...全文
15060 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
David_xtd 2013-07-31
  • 打赏
  • 举报
回复
1073741820对应到十六进制是0x3FFFFFFC, 而string本身的长度为4, 所以,单个string所占的空间最大可为0x40000000, 该数值为int的一半,不知为什么不是int的最大值。
David_xtd 2013-07-31
  • 打赏
  • 举报
回复
#include <iostream> #include <string.h> namespace { using namespace std; } int main() { string str = "0123456789"; cout << "sizeof(str) is: " << sizeof(str) << endl; cout << "size of str is: " << str.size() << endl; cout << "maxsize of str is: " << str.max_size() << endl; cout << "capacity of str is: " << str.capacity() << endl; cout << "================================================================================" << endl; return 0; } 环境:ubuntu 12.04 desktop,g++ Version 4.6.3,编译后运行的结果: u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ ./test_string_op sizeof(str) is: 4 size of str is: 10 maxsize of str is: 1073741820 capacity of str is: 10 ================================================================================ u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ 就是说最大字符长度只能为1073741820,不知道为什么会这样。
zO_Oz 2012-05-07
  • 打赏
  • 举报
回复
你去看看string是怎么封装的。
Scorpiour 2012-05-07
  • 打赏
  • 举报
回复 1
一般来说百万长度的string(一部英文小说)还是很轻松的……
luotuo44 2012-05-07
  • 打赏
  • 举报
回复
size_t类型能表示的最大值。4294967295
xdhxt 2012-05-07
  • 打赏
  • 举报
回复
同意5楼
firendlys 2012-05-07
  • 打赏
  • 举报
回复
如果字符串长度达到G的级别,还要注意一下你的内存是否足够。
一般来说,32位程序每个进程(不论是32位系统还是64位系统)最多只能使用2G内存(据说开启3GB模式,可以最多使用3G内存),就是说,即使string最大可以达到4G的容量,但由于系统限制,你永远无法使用那么多。
「已注销」 2012-05-07
  • 打赏
  • 举报
回复
size_type __CLR_OR_THIS_CALL max_size() const
{ // return maximum possible length of sequence
size_type _Num = _Mybase::_Alval.max_size();
return (_Num <= 1 ? 1 : _Num - 1);
}
max_size的实现是上面的,是最大值unsigned int-1;所以结果是4294967294,但可能string的长度比这个值还要大些
[Quote=引用 5 楼 的回复:]
如果内存够,std::string容纳6百万个字符就没问题。
std::string库有一个成员函数max_size,可以用来获得最大字符长度。
下面这段代码在我的机器上输出4294967294,其实就是signed int的最大值。


C/C++ code


#include <string>
#include <iostream>

using namespace s……
[/Quote]
taodm 2012-05-06
  • 打赏
  • 举报
回复
才6M,为啥自己不编段程序试一下?
clayXmore 2012-05-06
  • 打赏
  • 举报
回复
OK 谢谢!
northcan 2012-05-06
  • 打赏
  • 举报
回复
如果内存够,std::string容纳6百万个字符就没问题。
std::string库有一个成员函数max_size,可以用来获得最大字符长度。
下面这段代码在我的机器上输出4294967294,其实就是signed int的最大值。


#include <string>
#include <iostream>

using namespace std;

int main()
{
string s;
cout << s.max_size() << endl;

return 0;
}
clayXmore 2012-05-06
  • 打赏
  • 举报
回复
就6MB的样子吧!
clayXmore 2012-05-06
  • 打赏
  • 举报
回复
6百万可以吗?
muyi66 2012-05-06
  • 打赏
  • 举报
回复
string里有一个容量字段,还有个串长字段。在VS里都是32位的。如果没给别的限制,那就是说,弄个1、2个G也是可以的。不过,字符串有这么长的吗?
muyi66 2012-05-06
  • 打赏
  • 举报
回复
没试过,估计几万字符毛毛雨。
目录 1 正文 4 一、 C++string的使用 4 1.1 C++ string简介 4 1.2 string的成员 4 1.2.1 append 4 1.2.2 assign 5 1.2.3 at 5 1.2.4 begin 6 1.2.5 c_str 6 1.2.6 capacity 6 1.2.7 clear 7 1.2.8 compare 7 1.2.9 copy 7 1.2.10 _Copy_s 7 1.2.11 data 7 1.2.12 empty 7 1.2.13 end 7 1.2.14 erase 7 1.2.15 find 7 1.2.16 find_first_not_of 8 1.2.17 find_first_of 8 1.2.18 find_last_not_of 9 1.2.19 find_last_of 9 1.2.20 get_allocator 9 1.2.21 insert 9 1.2.22 length 9 1.2.23 max_size 9 1.2.24 push_back 9 1.2.25 rbegin 9 1.2.26 rend 9 1.2.27 replace 9 1.2.28 reserve 11 1.2.29 resize 12 1.2.30 rfind 12 1.2.31 size 12 1.2.32 substr 12 1.2.33 swap 12 1.3 string的构造 12 1.4 string的重载运算符 12 1.5 string与algorithm相结合的使用 13 1.5.1 string与remove 13 1.5.2 string与unique、sort 13 1.5.3 string与search 13 1.5.4 string和find、find_if 14 1.5.5 string与copy、copy_if 14 1.5.6 string与count、count_if 15 1.6 string与wstring 15 1.6.1 简介 15 1.6.2 wstring实例 15 1.6.3 wstring与控制台 16 1.6.4 string与wstring的相互转换 17 1.7 stringC++流 22 1.7.1 C++流简介 22 1.7.2 string与iostream、fstream 22 1.8 格式化字符串 23 1.8.1 简单常用的C方法 23 1.8.2 boost的方法 23 1.8.3 stlsoft + fastformat 23 1.9 string与CString 24 二、 boost字符串算法库 24 2.1 boost字符串算法库导论 24 2.1.1 boost.algorithm.string是什么? 24 2.1.2 相关 24 2.1.3 boost.range导论 24 2.1.4 boost.regex导论 24 2.1.5 boost.algorithm.string的DNA 24 2.2 boost字符串算法解密 24 2.2.1 修剪(trim.hpp) 24 2.2.2 转换(case_conv.hpp) 24 2.2.3 判断式、断言函数(predicate.hpp)【Predicates】 24 2.2.4 查找 24 2.2.5 删除和替换 24 2.2.6 分割和组合 24 2.2.7 分词 24 2.2.8 其它 24 三、 C字符串 24 3.1 C字符串常用算法 24 3.1.1 strcpy wcscpy 24 3.1.2 strcat wcscat 24 3.1.3 strchr wcschr 24 3.1.4 strcmp wcscmp 24 3.1.5 stricmp wcsicmp 24 3.1.6 strlen wcslen 24 3.1.7 strlwr/_strlwr wcslwr/_wcslwr 24 3.1.8 strncat wcsncat 24 3.1.9 strcspn wcscspn 24 3.1.10 strdup/_strdup wcsdup/_wcsdup 24 3.1.11 strncpy wcsncpy 24 3.1.12 strpbrk wcspbrk 24 3.1.13 strrev/_strrev wcsrev/_wcsrev 24 3.1.14 strset/_strset/_strset_l wcsset/_wcsset/_wcsset_l 24 3.1.15 strstr/wcsstr 24 3.1.16 strtok/wcstok 24 3.1.17 strupr/_strupr wcsupr/_wcsupr 24 3.2 更安全的C字符串函数 24 3.2.1 简述 24 3.2.2 简单实例 24 3.2.3 定制 24 3.2.4 兼容 24 3.3 通用字串函数 24 3.3.1 简述 24 3.3.2 简单实例 24 3.3.3 映射表 24 3.4 API级的字符串处理 24 3.4.1 简述 24 3.4.2 旧的API 24 3.4.3 Shell字符串函数 24 3.4.4 新的安全版字符串处理API 24 四、 c++字符串分词 24 4.1 简介 24 4.2 C库 24 4.3 C++ stringstream 24 4.4 boost字符串算法库的分词技术 24 4.4.1 泛型算法 24 4.4.2 迭代器 24 4.5 boost.tokenizer 24 4.5.1 组件 24 4.5.2 工具类解析 24 4.5.3 boost.tokenizer的缺陷 24 4.6 stlsoft::string_tokeniser 24 4.7 效率大PK 24 五、 C++字符串使用的建议 24 附录1:参考资料: 24 附录2: MSSTL中basic_string的部分源码解读 24 2.1 string的allocator 24 2.1.1 Allocate和Deallocate 24 2.1.2 allocator的泛型实现 24 2.1.3 string与char_traits 24 2.1.4 以char和wchar_t特化char_traits 24 附录3 TCHAR.h 映射表 24 日志: 24 1.0 版 24 1.1 版 24 1.2 版 24 2.0 版 24 2.1 版 24

65,174

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧