我在嘗試從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