1

定数ファイルで文字列定数を宣言した iOS アプリをコーディングしています。

NSString * const kHeader = @"name,age,gender";

および Constants.h で

FOUNDATION_EXPORT NSString * const kHeader;

そして、この文字列を ViewController クラスの NSOutput ストリームに次のように書き込もうとしています:

[outputStream 書き込み: [kHeader UTF8String] maxLength: [kHeader の長さ]];

これは、コンパイラの警告を示しています: Sending 'const char *' to parameter of type 'const uint8_t *' (別名 'const unsigned char *') は、ポインタ間を異なる符号の整数型に変換します

これは何を意味するのでしょうか?これを解決するにはどうすればよいですか? 助けてください。グーグルはあまり有用な結果を生成しませんでした。

4

1 に答える 1

6

署名済み/未署名のポインターの警告に加えて、コードが実際に間違っている可能性があります。 [kHeader length]は、文字列内の Unicode 文字の数を返します。これは、 によって返される UTF-8 バイトの数とは異なる場合があります[kHeader UTF8String]

たとえば、@"€"Unicode 文字は 1 つですが、UTF-8 バイトは 3 バイトです。

したがって、それを次のように置き換える必要があります

const char *utf8string = [kHeader UTF8String];
[outputStream write:(const uint8_t *)utf8string maxLength:strlen(utf8string)];

または代わりに

NSData *data = [kHeader dataUsingEncoding:NSUTF8StringEncoding];
[outputStream write:[data bytes] maxLength:[data length]];
于 2013-08-06T07:07:57.963 に答える