我在尝试从const char *中获取NSString时遇到了一个奇怪的错误。尝试将常量字符*转换为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并返回)。
这两天我一直在抨击我的头,任何帮助非常感谢!由于
编辑:
字符串最初来自来自的PowerVR的内幕SDK的结构SPODNode
。 在那里,我们有:
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();
}
我希望帮助!
我会怀疑'myCFunctionReturningConstCharPtr()' 。你能证明吗? – 2013-03-24 12:23:55
不是那么容易,涉及的代码太多了。我会尽力将其分解并添加到我的问题中。我希望这个例子能代表自己。 – 2013-03-24 12:27:39
我对'const char *'返回的方式感兴趣。特别是,它是通过调用'data()'还是'c_str()'从本地'std :: string'对象获得的。 – 2013-03-24 12:28:44