关于redis字符串设计的问题

来源:4-12 .2 C语言字符串问题

易萧

2022-08-11

其实redis也没有解决C++ string未解决的\0标识问题,对于终端传来的字符串以及内部使用本就有自己的处理和规范,但如果给它一个标准带\0的C串,它仍然无法解决这个问题。
C++ string没有解决这个问题就在于它的构造函数参数就是一个const char *传统c串,根本无法从这个参数获知\0后到底是否还有内容,除非提供手动设置串长,否则没有任何办法可以解决这个问题。

写回答

1回答

quickzhao

2022-08-11

不是的, Redis提供了解决此问题的方案。从兼容性C语言字符串的角度来看这个问题是无法解决的,但是你读读Redis源码,Redis的SDS是根据len的值来判断字符的长度的,而不是'\0'结尾,所以对二进制数据的存储是安全的

2
4
quickzhao
回复
CloseliRD
不需要,SDS是空间换时间,直接用变量存储了字符串的长度,没必要每次都调用获取。
2024-07-10
共4条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程