【问题标题】:Swift - C++ string via C API [duplicate]Swift - 通过 C API 的 C++ 字符串 [重复]
【发布时间】:2017-05-02 17:08:06
【问题描述】:

我有 Swift 与 C API 的桥接

我想做这样的事情:

const char * CApiFunc(){
    std::string str = "some_str";

    return str.c_str()
}

但这会导致问题,因为str 从堆栈中删除并且返回的地址不正确。除了将std::string 复制到新分配的数组并返回指向该数组的指针之外,还有其他方法吗,如下所示:

const char * CApiFunc2(){
    std::string str = "some_str";
    char * tmp = new char[str.length() + 1];
    memcpy(tmp, str.c_str(), str.length());
    tmp[str.length()] = 0;
    return tmp;
}

【问题讨论】:

标签: c++ swift


【解决方案1】:

不,没有别的办法。

根据设计,std::string 拥有其缓冲区。如果您不希望数据在字符串消失时消失,则必须将其复制到新缓冲区中。

在这个人为的示例中,首先确实不需要std::string,但我相信你知道这一点并且有一个更可靠的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多