【问题标题】:Reason for getting random garbage value in Xcode在 Xcode 中获取随机垃圾值的原因
【发布时间】:2014-08-25 06:15:33
【问题描述】:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSLog(@"HELLo %i");
    }
    return 0;
}

我试图在 Objective-C XCode 编译器中打印一个整数值,但我忘记指定变量。当我执行它时,我得到了一些垃圾值,比如整数 4144,98489866930523080936567411769317361312251531363217687183360.000000 和其他数据类型的值。 我真的很想知道这个垃圾输出背后的原因??????

【问题讨论】:

    标签: objective-c c


    【解决方案1】:

    这是因为要打印的值通过寄存器或堆栈/帧传递给将打印结果的函数。

    printf() 函数(或在您的情况下为 NSLog)以及类似的函数采用 1 个 或更多 参数。函数头没有指定最大参数个数。

    这个函数首先获取一个指向要打印的字符串的指针,然后解析它。每次遇到 %i、%d、%f 等时,它都会开始从堆栈中拉出要打印的值,一个接一个。

    在您的情况下,它正在拉取的值是未初始化的,因为它没有被指定,在这种情况下,它的值在解释为整数时转换为 4144。

    这里有一些很好的答案: How do vararg functions find out the number of arguments in machine code?

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 2021-10-25
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多