【问题标题】:Identifying C-variables [closed]识别 C 变量
【发布时间】:2012-11-16 21:43:09
【问题描述】:

我找到了这段代码 sn-p here,但我就是不知道变量 cSrtresult 是什么!

for(int i = 0; i<1000000; i++){
    CC_MD5(cStr, strlen(cStr), result);
    sprintf(cStr, "%02x%02x", result[0], result[1]);
}

编译器告诉我它们是charunsigned char,但是当我尝试运行它时,它在sprintf-line 处给了我一个EXC_BAD_ACCESS

你知道我可以做些什么来让这个 sn-p 工作吗?谢谢。

【问题讨论】:

    标签: iphone objective-c c


    【解决方案1】:

    cStrresult 应该是(无符号)字符数组,或指向(无符号)字符缓冲区的指针。

    例如

    char cStr[] = "This is my str";
    char result[16];
    for( int i=0; i<1000000; i++ )
    {
        CC_MD5( cStr, strlen(cStr), result );
        sprintf(cStr, "%02x%02x", result[0], result[1]);
    }
    

    注意cStr可能是const,因为它是只读的,但result应该是非常量缓冲区,因为CC_MD5将结果写入那里。

    编辑:

    实际上,在这种情况下,cStr 不能是 const,因为你在 sprintf 行中写入它,但只要你只在 CC_MD5 中使用它应该没问题。

    【讨论】:

    • 这种工作,它在循环 7 上崩溃,错误为 SIGABRT。很难解决这个问题.. 不过谢谢 :)
    • @Emil - 这不应该崩溃,至少不是这部分代码。
    • 确实如此,但我将您在此处编写的确切代码粘贴到我的应用程序中,但它在第 6 行崩溃...
    • 我得到的唯一警告是:Passing 'char [16]' to parameter of type 'unsigned char *' converts between pointers to integer types with different sign 在第 5 行。
    • 这可以通过使用unsigned char result[16] 而不是char result[16] 来修复...但不会导致崩溃...
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多