为什么fscanf在没有使用参数3+的地址的情况下工作正常?

时间:2013-01-17 16:12:12

标签: objective-c c memory-address

我在Objective-c和C中创建一个.obj加载器,遵循这个tutorial(纯c ++)。但是我注意到函数fscanf()对我运行正常,即使你没有发送它要设置的变量的内存地址(仅发送值)。对此有解释吗?

 Vec2 *uv;
 fscanf(file, "%f %f\n", uv.x, uv.y);
 [tempUVs addObject:uv];

请注意,参数uv.x和uv.y没有符号。

1 个答案:

答案 0 :(得分:6)

当你这样做时,未定义的行为。任何事情都可能发生 - 它可能会崩溃,它可能会正常运行,它可以显示以正确运行而无声地破坏内存,或者它可能会擦除您的硬盘驱动器。根据语言标准,这些都是允许的行为。

如果你正在使用一个不错的编译器进行编译,你可以使用GCC或Clang提高你的警告级别(例如-Wall,也可能-Wextra -pedantic),并且它可以警告你将错误的参数传递给*scanf / *printf系列函数。具体来说,-Wformat选项会针对此类事件发出警告(-Wformat包含在-Wall中)。