0
const char *string ="Hi there,this is a C string";
NSData *data=[NSData dataWithBytes:string 
                            length:strlen(string)+1];
NSLog(@"data is %@",data);
NSLog(@"%lu byte string is '%s'",[data length],[data bytes]);

これはうまく暗示することができます。最後の文が次の場合:

NSLog(@"%d byte string is '%s'",[data length],[data bytes]);

変換で型 'int' が指定されているが、引数の型が 'NSUInteger' (aka'ussigned long') であることを警告します。

なぜ%dできないのですか?

4

2 に答える 2

2

NSUInteger は基本的に unsigned long なので、代わりに %lu を使用してください。

于 2012-07-15T03:10:30.153 に答える
0

%d は「int」を意味します。NSUInteger は「int」ではないため、%d は機能しません。フォーマット指定子をタイプと一致させる必要があります。間違ったタイプを指定すると、プログラムがクラッシュしたり、ガベージを出力したりする可能性が高くなります。

于 2012-07-15T03:56:51.197 に答える