C++ Swift-C++;通过C API的字符串
我有Swift与C API的桥接 我想这样做:C++ Swift-C++;通过C API的字符串,c++,swift,C++,Swift,我有Swift与C API的桥接 我想这样做: const char * CApiFunc(){ std::string str = "some_str"; return str.c_str() } const char * CApiFunc2(){ std::string str = "some_str"; char * tmp = new char[str.length() + 1]; memcpy(tmp, str.c_str(), str.le
const char * CApiFunc(){
std::string str = "some_str";
return str.c_str()
}
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;
}
但这会导致问题,因为str
从堆栈中删除,并且返回的地址不正确。除了将std::string
复制到新分配的数组并返回指向该数组的指针之外,还有其他方法吗,如下所示:
const char * CApiFunc(){
std::string str = "some_str";
return str.c_str()
}
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;
}
不,没有别的办法了 一个
std::string
,根据设计,拥有它的缓冲区。如果您不希望数据在字符串消失时消失,则必须将其复制到新的缓冲区中
在这个人为设计的示例中,首先确实不需要
std::string,但我相信您知道这一点,并且有一个更可靠的用例。不,没有其他方法
一个std::string
,根据设计,拥有它的缓冲区。如果您不希望数据在字符串消失时消失,则必须将其复制到新的缓冲区中
在这个人为设计的示例中,首先实际上不需要std::string
,但我相信你知道,并且有一个更坚实的用例。这似乎并没有任何与SWIFT或C.@边界的关系,我想如果有一种方法,比如把Swift String作为参数,并将其填充到C或C++边上。这样,这是一个基于Swift的问题。一个可能的替代方法是将数组作为存储传递给C函数,比较。我迄今为止看到的最好的包装方法是::这似乎并没有任何与SWIFT或C.@边界的关系,我想如果有一种方法,例如将Swift String作为参数,并将其填充到C或C++边上。这样,这是一个基于Swift的问题。一个可能的替代方法是将数组作为存储传递给C函数compare。