0%

格式化输出导致的疑似bug

1
2
3
NSString *str = @"123456a";
NSData *dataStr = [str dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%s %s", [str UTF8String], dataStr.bytes);

iOS9.0模拟器.
输出:123456a 123456a–˝ã˘
dataStr.bytes的二进制内容:31 32 33 34 35 36 61 D0 1D 13 FD 8B F9 07 00 10
出现上述情况的原因:
需要了解%s是如何打印c字符串的.
%s打印的时候遇到\0就停止,[str UTF8String]转换的时候,自动在字符数组的最后面加上了\0(A null-terminated UTF8 representation of the string.),但是data.bytes后面’不一定’是\0,所以打印data.bytes的时候会有额外的内容.

觉得文章有帮助可以打赏一下哦!