我在尝试从 const char * 获取 NSString 时遇到了一个奇怪的错误。
// in my obj c class
void myObjCMethod {
const char* charString = myCFunctionReturningConstCharPtr();
printf("%s \n", charString); // prints the correct string
// ...put a brakpoint here...
NSString * nsString1 = [NSString stringWithUTF8String:charString];
NSLog(@"%@", nsString1); // prints nothing
NSString * nsString2 = [NSString stringWithFormat:@"%s",charString];
NSLog(@"%@", nsString2); // prints nothing either
}
来自我的 c 方法的 const char 很好地打印到控制台。但是尝试转换为 NSString 会导致空字符串。现在最奇怪的是,当我尝试调试代码并设置断点(如上所示)时,我的 NSString 突然变得有效!
那又怎样——我的测量改变了结果?很久以前的物理课听起来很熟悉,但我怀疑这里涉及到量子力学。
笔记:
我暂时省略了 的实现myCFunctionReturningConstCharPtr()
,因为它会增加另一层可能与当前问题无关的复杂性(涉及多个 c++ 库,字符串已从 char 指针转换为 std::string 并返回) .
两天来我一直在努力解决这个问题,非常感谢任何帮助!谢谢
编辑:
该字符串最初来自SPODNode
PowerVR 的 Insider SDK 的结构。我们有:
struct SPODNode {
PVRTchar8 *pszName;
// ...
}
和:
typedef char PVRTchar8;
在我的代码中,我这样做:
std::string MyCppClass::pvrNodeName() {
if (node && node->pszName) {
string stdName(node->pszName);
return stdName;
}
return string();
}
最后在myCFunctionReturningConstCharPtr()
:
const char * myCFunctionReturningConstCharPtr() {
std::string stdString = myCppClassInstace->pvrNodeName()
return stdString.c_str();
}
我希望这会有所帮助!