iOS-NSData bytes方法数据越界问题

在项目中,发现直接使用NSData的bytes方法出现数组越界情况。

测试代码:

1
2
3
NSString *key = @"1234abcd";
NSData *data = [key dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%s %s %ld", [key UTF8String], [data bytes], data.length);

发现,打印结果为:

1
1234abcd 1234abcdßéV˙ 8

显然,bytes方法返回的数据多了一些异常的字符,查看文档:

1
The -bytes method returns a pointer to a contiguous region of memory managed by the receiver.

说明,bytes方法返回的是一段连续的内存空间,可能连带着一些多余的字符。替换方法:

1
- (void)getBytes:(void *)buffer length:(NSUInteger)length;