可能重复:
Turbo C Array Question
#include <stdio.h>
#define LIM 40
int main()
{
int day=0;
float temp[LIM];
do
{
printf("Enter temperature for day %d.", day);
scanf("%f", &temp[day]);
}
while(temp[day++] && day<LIM );
}
关于最后一行。为什么对while(temp[day++] > 0)
不满意?因为我将 LIM 设置为40的值?我为什么要添加一些其他条件,例如 day<LIM
?
答案 0 :(得分:3)
因为,如果输入41个数字,您将写入数组外的位置,从而调用可怕的未定义行为。当你试图写入temp[40]
(第41个元素)时,你可能会破坏你不应该记忆的记忆。 可能工作一段时间超出数组的末尾,但这是未定义行为的本质。这仍然不是一个好主意。
当您输入40个温度时,day < LIM
位将强制循环退出,无论您实际输入的是什么值。
答案 1 :(得分:2)
避免数组溢出。 temp
数组包含LIM
个单元格,您需要检查是否不会尝试访问内存,因为它会导致未定义的行为。
如果你想获得超过40个元素,你应该为它们分配更多的内存,这可以通过将LIM
定义为更大的值来完成,例如#define LIM 48
。
答案 2 :(得分:1)
因为C不做魔法。它不会检查您是否超出分配的内存。它无法知道访问是否有效,因此它无论如何都会尝试访问。
答案 3 :(得分:-4)
它“满意” - 为什么你认为它不会。在这里发帖时,请发布您要询问的真实代码。