|
3
|
| Andreas Rejbrand · 技术社区 · 16 年前 |
|
|
1
4
你说得对。没有确切的模拟
一个数组
您可以定义一个记录,该记录的长度有一个字段,字符数组有另一个字段。这将解决长度问题,但它仍然具有未修饰数组的所有其他缺点。 如果我是你,我只需要使用一个内置的字符串类型。然后我编写函数来帮助在文件、内存块和本机变量之间传输它。这并不难,可能比尝试让操作符重载刚好与自定义记录类型一起工作要容易得多。考虑您将写入多少代码来加载和存储您的数据,而您将写入多少代码来像普通字符串一样使用您的数据结构。您将要编写数据持久性代码 一旦 但是在项目的余生中,你将使用这些字符串,你将希望它们看起来和行为就像真正的字符串。所以使用真正的字符串。”遭受“手动生成所需磁盘格式的不便,并获得能够使用所有现有字符串库功能的优势。 |
|
2
1
PChar应该这样工作,对吗?阿法克,它是一组字符,存储在你放的地方。以零结尾,不确定如何使用Unicode字符。 |
|
|
3
1
实际上,在新的unicode字符串中也有这样的特性。
直接读取记忆长度:
|
|
|
4
1
没有短字符串的Unicode版本。如果要将Unicode数据以内联方式存储在对象内,而不是作为引用类型,则可以分配一个缓冲区:
这有两个缺点。1,大小是固定的,2,编译器不将其识别为字符串类型。 这里的主要问题是1:固定尺寸。如果要在较大的对象或记录内声明数组,编译器需要知道数组有多大才能计算对象或记录本身的大小。对于短字符串来说,这不是一个大问题,因为它们最多只能达到256字节(k的1/4),这并不算多。但是,如果您想使用由32位整数寻址的长字符串,则最大大小为4GB。你不能把它放在物体里面! 这不是引用计数,而是将长字符串实现为引用类型的原因,其内联大小始终是常量sizeof(指针)。然后编译器可以将字符串数据放入动态数组中,并根据当前需要调整其大小。 为什么需要将类似这样的东西放入压缩数组中?如果我猜的话,我会说这可能与序列化有关。如果是这样,最好使用tstream和普通的unicode字符串,然后向流中写入一个整数(大小),然后再写入字符串的内容。这比试图将所有东西塞进一个压缩的数组要灵活得多。 |
|
|
5
0
我最终确定的解决方案是这样的(真实世界的样本-字符串当然是第三个名为“ident”的成员):
哪里
但后来我意识到编译器确实可以解释
因此,毕竟,上面梅森·惠勒给出的答案实际上是 这个 回答。 |
|
Ben · 统计向量中的单词在字符串中出现的频率 1 年前 |
|
|
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 1 年前 |
|
|
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 1 年前 |
|
|
user764754 · 防止多行原始字符串文字中出现新行字符 1 年前 |
|
|
Bogaso · 从列表中返回与模式匹配的元素 1 年前 |
|
|
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 1 年前 |