我的代码不断崩溃(这是一个旧的iOS应用程序,没有ARC)。这是有问题的代码:
- (NSString *) dataToHex:(NSData *)data {
NSUInteger len2 = [data length] * 2;
unsigned char* chars = (unsigned char*) [data bytes];
char finalChar[len2 + 1];
for(int i = 0; i < len2; i++) {
sprintf(finalChar + (i * 2), "%02x", chars[i]);
}
finalChar[len2] = '\0';
NSString *hexString = [NSString stringWithFormat:@"%s", finalChar];
return hexString;
}
崩溃在
sprintf()
行中。有任何想法吗?我尝试使用更大的缓冲区大小,但是不起作用。
最佳答案
看起来像这样的循环:
for(int i = 0; i < len2; i++) {
应该:
for(int i = 0; i < len; i++) {
(否则,您将读取输入数据之外的内容,而写入输出数据之外的内容)。
关于ios - sprintf上的SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35894814/