gpt4 book ai didi

swift - 如果给定一个子字符串,是否可以访问它所基于的底层完整字符串?

转载 作者:可可西里 更新时间:2023-11-01 01:58:13 24 4
gpt4 key购买 nike

假设我有以下代码...

let x = "ABCDE"
// 'x' is a String

var y = x[1...3]
// 'y' is a Substring that equals "BCD"

如果您只能访问 y,是否可以访问 x,或者特别是 x 的范围之外的部分? (即您可以访问“A”或“E”,或者扩大 y 的范围吗?)

最佳答案

Apple 是这样说的:

Important

Don’t store substrings longer than you need them to perform a specific operation. A substring holds a reference to the entire storage of the string it comes from, not just to the portion it presents, even when there is no other reference to the original string. Storing substrings may, therefore, prolong the lifetime of string data that is no longer otherwise accessible, which can appear to be memory leakage.

现在我发现他们在最后一句话中使用“否则”这个词很有趣。在我看来,这个问题的大门是敞开的——子字符串是否可以被操纵以扩展以包括我们知道仍然作为原始字符串的一部分存在的任一侧的内存?

所以我认为这是一个公平的测试:

let x = "ABCDEFGH"

let substr = x.prefix(3)
var substrIndex = substr.startIndex
substr.formIndex(&substrIndex, offsetBy: 4) // offset beyond the substring
let prefix = substr.prefix(through:substrIndex)
print(prefix)

那么你认为这会打印出什么?
实际上我们从来没有接触过打印品。相反,我们得到了一个运行时 fatal error 。

Thread 1: Fatal error: Operation results in an invalid index

顺便说一句,即使尝试以下结果也会导致 EXC_BAD_ACCESS 崩溃:

let x = "ABCDEFGH"

var substr = x.prefix(3)
withUnsafePointer(to: &substr)
{ substrPointer in
let z = substrPointer.advanced(by: 3)
print(z.pointee)
}

所以我认为,如果您只有一个子字符串,则无法获取字符串的其余部分...无论如何,从 Substring 或 String 类中,甚至处理不安全的指针。我确信有一种使用直接内存访问的方法,因为 Apple 声称 String 的其余内存在那里......但你可能不得不退回到 C 或 C++。

关于swift - 如果给定一个子字符串,是否可以访问它所基于的底层完整字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49216919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com