我正在尝试用C语言打印数组的值。我只使用3格式说明符只有一个数组值,我的问题是我不明白其他两个值是如何进入我的输出。
这是我的代码:
int arr[6] = {3,4,42,2,77,8};
printf("%d %d %d ",arr[2]);
output :
42 3 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]
。