【发布时间】: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;
}
【问题讨论】:
-
这似乎与 Swift 或 C 没有任何关系。
-
@BoundaryImposition 我想是否有类似的方法。将 Swift String 作为参数传递给函数并在 C 或 C++ 端填充它。这样,它是一个基于 Swift 的问题
-
一种可能的替代方法是将数组作为存储传递给 C 函数,比较 stackoverflow.com/questions/28090910/…。
-
目前我看到的最好的包装方法是由Miles Budnek:convert an std::string to a Swift String提出的。