对于C中的循环不能按预期工作

mrg*_*mrg -5 c for-loop

我不明白以下for循环的流程:它变成了一个无限循环.我使用的是ubuntu 12.04.我在这里做错了吗?

#include <stdio.h>
main()
{
    int k,a[10];
    for(k=0; k<=10; k++)
    {
        a[k]=1;
        printf("k = %d\n",k);
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦k == 9,它会自动更改为1.我不知道它为什么会这样.我究竟做错了什么?

ame*_*yCU 5

 for(k=0; k<=10; k++)
Run Code Online (Sandbox Code Playgroud)

此访问超出绑定索引.a[10](索引以0有效索引开头0-9)超出约束并调用未定义的行为.

循环应该是这个 -

 for(k=0; k<10; k++)
Run Code Online (Sandbox Code Playgroud)

  • @mohan可能是因为`i`恰好存储在堆栈中的数组之后.但情况并非总是如此.这是UB. (2认同)