C - 如何打印动态数组?

时间:2015-10-11 23:57:04

标签: c arrays

我对是否正确打印动态数组感到有些困惑。我正在解析输入文件。假设输入文件是:

x 6 9 15

然后我的目标是将1,2和3存储到一个名为x的数组中。它正是这样做的。我使用以下方法设置了数组的大小:

arr = malloc(sizeof(int)*noValues);

(我的int *arr在我的文件中声明为全局变量)

其中noValues等于输入文件中遇到的值的数量(在本例中为3)。

然后我使用:

打印数组
for (i = 0; i < noValues; i++) {
    printf("arr[%d]: %d\n", j, arr[j]);
} 

并获得以下输出:

arr[0]: 6
arr[1]: 9
arr[2]: 15

然而,当我改变&#34; noValues&#34;在for循环中,我得到以下内容:

并获得输出:

arr[0]: 6
arr[1]: 9
arr[2]: 15
arr[3]: 0
arr[4]: 0
arr[5]: 0
arr[6]: 49
arr[7]: 0
arr[8]: 17060496
arr[9]: 0

为什么我得到一些非0值?难道他们都不是0吗?任何清理将不胜感激。这是正常的C行为吗?

3 个答案:

答案 0 :(得分:2)

您正在访问&#34;元素&#34;超出arr的边界,这是{​​{3}};这就是为什么你得到看似随机的价值​​(但应用程序也可能崩溃)。

答案 1 :(得分:1)

您正在访问数组的末尾,这是未定义的行为。技术上任何都可以在你这样做时发生,但实际上通常会发生两件事情:程序会崩溃,或者你只是得到任何字节在内存中的位置值数组的结尾。 (但这不是你可以或应该依赖的东西。)

答案 2 :(得分:1)

未初始化的数组行为无法修复。未初始化数组的值为零,可以实现垃圾。如果你想得到数组中所有元素的零值,那么使用bzero或memset函数。