ios - sprintf上的SIGABRT

标签 ios objective-c arrays segmentation-fault printf

我的代码不断崩溃(这是一个旧的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/

相关文章:

ios - NSURLSession 认证

ios - RestKit:postObject 调用了什么委托(delegate)方法?

ios - 如何在 swift 中使用 block /闭包

objective-c - 多个if条件

ios - 选择单元格后如何更改UITableViewCell图像?

java - 在不启动接收 Activity 的情况下将数据传递给 Activity (Android)

c++ - 不了解指针和类在此示例中如何协同工作

ios - 更改 Eureka TextRow 的文本对齐方式

iOS 10 终止应用程序后在后台通知?

javascript - Javascript 中具有多个值的动态键值数组