为什么数组只显示一个格式说明符时显示垃圾值?

时间:2014-12-05 19:50:07

标签: c arrays printf

我正在尝试用C语言打印数组的值。我只使用3格式说明符只有一个数组值,我的问题是我不明白其他两个值是如何进入我的输出。

这是我的代码:

int arr[6] = {3,4,42,2,77,8};

 printf("%d %d %d ",arr[2]);

  output :
  42 3 4 

4 个答案:

答案 0 :(得分:3)

根据C标准

  

如果格式的参数不足,则行为为   未定义。

在你的printf电话中

printf("%d %d %d ",arr[2]);

在第一个格式specjfjer之后,参数已用完。因此函数调用具有未定义的行为,输出可以包含任何垃圾。

你应该写

printf( "%d ", arr[2] );

或者例如

printf( "%d %d %d ", arr[2], arr[3], arr[4] );

答案 1 :(得分:1)

printf()看到三个格式说明符时,它会查看堆栈内存或CPU寄存器中的特定位置,具体取决于编译器的约定,对于三个参数。

您提供了一个,但是您无法控制的一些数据存在于其他两个位置,这就是打印的内容。

答案 2 :(得分:0)

其他两个值是垃圾,没有任何意义。函数printf需要与格式说明符一样多的参数,因此在您的情况下为三。由于您只提供了一个参数(arr[2]),另外两个说明者不知道'什么打印 - 因此gargabe将会出来。确保提供所需数量的参数。

如果要按编号打印阵列编号,则必须使用for循环。

答案 3 :(得分:0)

printf的签名是。

int printf(char*, ...);

那么,你可以拥有可变数量的参数。

printf("%d %d %d ",arr[2]);

是函数printf的有效调用。

但是,因为你自己没有提供任何价值,所以你会得到任何......在你的特殊情况下,它似乎打印了arr[0]arr[1]