在代码块内将数组初始化为值0

时间:2013-07-14 07:55:08

标签: c default-value array-initialization

这是片段

main(){
//
  while(){
  int b;
  scanf("%d",&b);
  int arr[b];
  }
}

现在好了,因为我不知道数组的确切界限,所以我必须使用scanf *作为变量* 。并且创建的数组包含垃圾值。为此,我必须将每个元素初始化为0,因为这就是我想要的。

有没有办法可以让这个东西工作,而不必每次都在循环内初始化?

由于

修改 我想我可以用calloc来分配内存。是否会使用不同的内存?

2 个答案:

答案 0 :(得分:4)

如果您需要一个运行时大小的数组,那么正确的方法取决于您的数组的大小。

如果b的值可能很大,则将其声明为本地数组可能会导致堆栈溢出。在这种情况下,更好的想法是使用calloc动态分配您的数组。 calloc会正确地初始化int数组。

如果数组相对较小并且可以安全地在堆栈上分配,那么您可以简单地将其声明为本地数组(这是您在原始代码中所做的那样),然后使用{{将它设置为全零。 1}}。

当然,在这两种情况下,您最终都可能会在库函数内部实现隐藏的内存归零周期。在一般情况下,如果不使用循环,则无法将大的内存区域设置为零。

答案 1 :(得分:1)

如果您的编译器支持C99,那么您可以轻松使用VLA;

int a, b; 
printf("Enter size of array: ");
scanf("%d",&b);

int arr[b];

并在您的情况下将其所有元素初始化为零使用内部循环或标准库函数memset

memset(b, 0, sizeof(b));