2017-04-10 9 views
1

NSStringからcStringを取得します。
私たちはEncoding Using:Stringメソッドを使用しました。
ただし、c String Using Encoding:メソッドの戻り値は保証されていません。
(Appleのdoc:返されたC文字列は、受信者が解放されるまで有効です)

Appleはget CString:max Length:encoding:メソッドを推奨しています。
正確な長さをmaxLengthに渡したいと思います。
UTF-8文字列の長さをバイト単位で取得する最も良い方法は?

例1)

NSString *tmp = @"中日韓" // cString 9bytes 
char *buffer = new tmp[9 + 1]; 
[tmp getCString:buffer maxLength:9+1 encoding:NSUTF8String​Encoding]; 

例2)

NSString *tmp = @"中日韓123" // cString 12bytes 
char *buffer = new tmp[12 + 1]; 
[tmp getCString:buffer maxLength:12+1 encoding:NSUTF8String​Encoding]; 

上記実施例9及び12の長さを知る方法はありますか?

+0

あなたのコードが有効でないとコンパイルされません:あなたは、その後、tmpよりも長生きしたchar *が必要な場合は、単純にC-文字列をコピーします。 'NSString * tmp = @"あなたの文字列 ";"か、 'char * tmp ="あなたの文字列 ";'を意味しますか? – rmaddy

+0

@rmaddy申し訳ありませんが、私の間違いです。私はそれを編集した。 – user3569109

+4

なぜこのタグはC++ですか?あなたはObjective-Cコードしか持っていません。 – rmaddy

答えて

4
// Add one because this doesn't include the NULL 
NSUInteger maxLength = [string maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; 
+1

lengthOfBytesUsingEncoding:より正確です。文字列の実際の長さを取得します(もちろん、NULLには1を追加する必要があります)。 maximumLengthはすぐに返りますが、NSUTF8StringEncodingに必要な長さを超えます。 –

3

cStringUsingEncodingを使用して長さを取得できます。

NSString *tmp = @"中日韓" // cString 9bytes 
const char *cStr = [tmp cStringUsingEncoding:NSUTF8StringEncoding]; 
size_t len = strlen(cStr); 
char *buffer = new tmp[len + 1]; 
strcpy(buffer, cStr); 
関連する問題