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'(又名'usigned long')

为什么%d不能?

4

2 回答 2

2

NSUInteger 基本上是一个无符号长整数,因此请改用 %lu。

于 2012-07-15T03:10:30.153 回答
0

%d 表示“int”。NSUInteger 不是 'int',所以 %d 不起作用。您必须将格式说明符与类型匹配。如果您指定了错误的类型,您的程序可能会崩溃或更可能会打印垃圾。

于 2012-07-15T03:56:51.197 回答