C-Array输出与同一printf()的预期不同

时间:2014-07-31 09:02:29

标签: c arrays printf

我正在尝试执行“查找错误”分配,而这一小段C代码(不能按原样运行)应该有一个错误。不幸的是我找不到一个。我把它放入可运行的代码中,它似乎按预期运行...这是一个技巧问题还是我错过了什么?非常感谢任何帮助。

代码snippit:

void example(int a[10]){
        int i = 0;
        do {
           a[i] = i++;
        }while (i < 10);
    }

我的可运行代码:

#include <stdio.h>
#include <string.h>

example(int a[10]){
    int i = 0;
    do {
       a[i] = i++;
       printf("%i", a[i-1]);  //decremented by 1 to offset i
    }while (i < 10);
}

int main(void)
{
   int arr[10];    
   example(arr);
   return 0;
}

输出:

0123456789

1 个答案:

答案 0 :(得分:3)

这是错误的,并调用未定义的行为:

a[i] = i++;

没有为赋值,增量或索引运算符指定序列点,您不知道增量对i的影响何时发生。

看看Question 3.1 of C-FAQ