CXString
は libclang での文字列型で,C の文字列に直すには clang_getCString()
を使う.
CXString s = clang_getCursorSpelling(cursor); char const* p = clang_getCString(s);
しかし,どうやら複数回 clang_getCString()
を適用すると1回目と2回目では違う値が返ってくることに気づいた.
CXString s = clang_getCursorSpelling(cursor); char const* p1 = clang_getCString(s); // p1 は CXString が表す文字列で NULL でない char const* p2 = clang_getCString(s); // p2 は NULL ...
次のように,予め文字列が NULL
でないかをチェックするために複数回使っていたら SEGV が出てデバッグする羽目になった.
CXString s = clang_getCursorSpelling(cursor); if (clang_getCString(s)) { // この if 文には入る char const* p = clang_getCString(s); // p は NULL !!! }
仕方ないので,次のようにして回避した.
CXString s = clang_getCursorSpelling(cursor); char const* cs = clang_getCString(s); if (cs) { // この if 文には入る char const* p = cs; // p は NULL じゃないヤッター }
clang_getCString() のドキュメント には特に何も明記されていない…
- 環境
- OS X 10.9
- clang 3.4
- libc++ 3.4