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メソッドからのconstcharは、コンソールにうまく出力されます。ただし、NSStringに変換しようとすると、文字列が空になります。ここで最も奇妙なことは、コードをデバッグしてブレークポイントを設定しようとすると(上記のように)、NSStringが突然有効になることです。
それで、何-私の測定は結果を変えますか?ずっと前の物理学の授業でおなじみのように聞こえますが、ここに量子力学が関係しているとは思えません。
ノート:
おそらく現在の問題とは関係のない複雑さの別の層を追加するため、今のところの実装を省略しましたmyCFunctionReturningConstCharPtr()
(複数のc ++ライブラリが関係しており、文字列はcharポインタからstd :: stringに変換されています) 。
私はこれに2日間頭をぶつけてきました、どんな助けでも大歓迎です!ありがとう
編集:
文字列は、最初はSPODNode
PowerVRのInsiderSDKの構造体から取得されます。そこにあります:
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();
}
お役に立てば幸いです。