strlen
の代わりにmemchr
を使用して、NSStringのバッキング文字列として潜在的に使用されるC文字列の長さを調べたいとします。これは安全ですか、私は私が所有していない記憶を読んで危険を冒し、クラッシュを引き起こしますか? NSStringが内部バッファで処理される前に解放されないと仮定しましょう。NSStringから返された内部UTF-8 char *でmemchrを安全に使用できますか?
答えて
memchr(s, 0, XXX)
とstrlen(s)
は、かなり同じように動作するはずです。mechr()
のXXXバイト後に終了する機能はありません。しかし、strnlen()
でもそれができます。
この動作はおそらく正確にではありませんが必要です。
いずれの関数も、あらゆる種類のユニコードエンコードを考慮していません。したがって、返される長さはlength-in-bytesであり、文字数ではありません。
NSString
に-length
を使用すると、文字列の長さが必要になります。それを超えて、あなたは何をしようとしていますか?
これは、UTF-8文字列の場合のみです。私はそれを反映するために質問を編集しました。 – meisel
@meisel 'strlen()'は、文字の長さではなくバイト長を与えます。 'memchr()'も同様です。だから、これは本当にあなたが望むものであるとは思われません。文字列をバイトの汎用バッファとして扱いたい場合は、その文字列を 'NSData'に変換するか、バイトを文字列とは別の独立したバッファにコピーします。 – bbum
実際、これはまさに私が欲しいものです。私は最終的に、この文字列はNSStringを作成するために使用される大きな文字列の一部になります。私の戦略は、Objective-Cオブジェクトからバッファーを取り出し、処理し、APIのユーザーのためのNSStringとして再結合します。これは非常に高速であり、UTF-8がどのように動作するかを考える必要はありませんが、ヌルで終了する点が異なります。 – meisel
- 1. utf8mb4列でutf8接続を安全に使用できますか?
- 2. utf8列でutf8mb4接続を安全に使用できますか?
- 3. ios UTF8エンコーディングからnsstring
- 4. functionからstring literalを割り当てられたconst char *を返すのは安全ですか?これは
- 5. 内部的に静的なstd :: stringを使用する関数からconst char *を返すのは安全ですか?
- 6. static final char []スレッドは安全ですか?
- 7. NSStringを使用したUTF8デコード
- 8. run()メソッドの内部でJavaスレッドを安全に停止できますか?
- 9. 無料でcallocを安全に使用できますか?
- 10. マルチレリージョンオートスケーラでプリエンプティブサーバを安全に使用できますか?
- 11. APIキーでfile_get_contentsを安全に使用できますか?
- 12. SVG要素でaddEventListenerを安全に使用できますか?
- 13. シグナルハンドラでSIGRTMINとSIGRTMAXを安全に使用できますか?
- 14. このログインをクッキーで安全に使用できますか?
- 15. AsyncStorageの内部にアクセストークンを安全に保存できますか?
- 16. mainfunctionのパラメータと変数はサブルーチン内で安全に使用できますか?
- 17. PayPal .NET SDKはXamarin.Formsで安全に使用できますか?
- 18. ngStorageを安全に使用できますか?
- 19. C++:longjmpとsetjmpを安全に使用できますか?
- 20. infopathから構築されたシェイプフォームは安全ですか?
- 21. "this"をコンストラクタで使用してスレッドを安全に開始できますか?
- 22. データベースエラーが発生した後でDbContextを安全に使用できますか
- 23. ndbタスクレット内でimages.get_serving_url_async()を使用しても安全ですか?
- 24. dompdf + file_get_contentsは安全に使用できますか?
- 25. マーキーは安全に使用できますか?
- 26. ブラケットのウェブサイトとテキストエディタは安全に使用できますか?
- 27. java.io.BufferedOutputStreamは安全に使用できますか?一見
- 28. JDK7は安全に使用できますか?
- 29. 「ラインハイト」スタイルは安全に使用できますか?
- 30. このソート方法は安全に使用できますか?
ポインタが有効なままである限り安全でない理由はありません。しかし難しいのは、NSStringから取得しない限り、ポインタが解放されたときを簡単には知ることができないということです。次に、単に 'length'を呼び出してください。 –
関連:http://stackoverflow.com/questions/ 29473872/lifespan-of-nsstring-cstringusingencoding-return-value。 –
文字列に '-length'を直接呼び出さないのはなぜですか? –