采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
其实redis也没有解决C++ string未解决的\0标识问题,对于终端传来的字符串以及内部使用本就有自己的处理和规范,但如果给它一个标准带\0的C串,它仍然无法解决这个问题。 C++ string没有解决这个问题就在于它的构造函数参数就是一个const char *传统c串,根本无法从这个参数获知\0后到底是否还有内容,除非提供手动设置串长,否则没有任何办法可以解决这个问题。
不是的, Redis提供了解决此问题的方案。从兼容性C语言字符串的角度来看这个问题是无法解决的,但是你读读Redis源码,Redis的SDS是根据len的值来判断字符的长度的,而不是'\0'结尾,所以对二进制数据的存储是安全的。
有些疑问,Redis的SDS是根据len的值来判断字符的长度的,那len的值是怎么得到的呢?
储存或修改字符信息时会同步更新len的值。
为什么不通过比较sizeof()和strlen()的值来判断呢?
登录后可查看更多问答,登录/注册
一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维
1.3k 12
1.2k 12
1.3k 10
1.2k 9
1.1k 9