-1

我正在按照本教程(纯 c++)在 Objective-c 和 C 中制作 .obj 加载器。但我注意到,fscanf()即使您不向它发送要设置的变量的内存地址(仅发送值),该函数对我来说运行良好。对此有解释吗?

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

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

4

1 回答 1

6

当你这样做时,这是未定义的行为。任何事情都可能发生——它可能会崩溃,它可能碰巧正确运行,它可能看起来正确运行,同时默默地破坏内存,或者它可能会擦除你的硬盘驱动器。根据语言标准,这些都是允许的行为。

如果你用一个不错的编译器编译,你可以提高你的警告级别(例如-Wall,可能还-Wextra -pedantic使用 GCC 或 Clang),当你将错误的参数传递给*scanf/*printf系列函数时,它会警告你。具体来说,该-Wformat选项会针对此类事情发出警告(-Wformat作为 的一部分包含在内-Wall)。

于 2013-01-17T16:17:07.427 回答