【问题标题】:How do I get a persistent pointer to a String?如何获得指向字符串的持久指针?
【发布时间】:2020-08-23 22:04:59
【问题描述】:

我找到了String's generic instance method withCString(_:),但我需要获取指向多个字符串的指针,并且不希望有一堆嵌套的闭包。例如,假设str1str2 都是String 实例,foobar 都是C 结构类型,do_something 是C 函数。那我该怎么做呢?

let ptr1 = str1.pointerThatPersistsEvenAfterPassedToFunction
let ptr2 = str2.pointerThatPersistsEvenAfterPassedToFunction
let c_struct1 = foo(ptr1, 1, 2)
let c_struct2 = bar(ptr2, 3, c_struct1)
do_something(c_struct1, c_struct2)
str1.invalidatePersistentPointer
str2.invalidatePersistentPointer

【问题讨论】:

    标签: c swift string pointers


    【解决方案1】:

    如果不使用withCString,您将无法安全地访问 Swift String 的底层缓冲区。

    因此,您可以使用嵌套闭包,这是使用CStrings 的最安全和最正确的方法,也可以使用UnsafeMutablePointer<CChar> 并自己分配和管理CStrings。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2015-06-22
      • 2011-04-12
      • 1970-01-01
      相关资源
      最近更新 更多