这是的片段
main(){
//
while(){
int b;
scanf("%d",&b);
int arr[b];
}
}
好的,现在,由于我不知道数组的确切边界,我必须使用scanf*作为变量*。并且创建的数组包含垃圾值。为此,我必须将每个元素初始化为0,因为这正是我想要的。
有没有一种方法可以让这个东西工作起来,而不必每次在循环中初始化?
感谢
编辑我想我可以用calloc来分配内存。是否会使用不同的内存?
如果您需要一个运行时大小的数组,那么正确的方法取决于数组的大小。
如果b
的值可能很大,那么将其声明为本地数组可能会导致堆栈溢出。在这种情况下,更好的想法是使用calloc
动态分配数组。CCD_ 3将正确地对CCD_ 4阵列进行零初始化。
如果数组相对较小并且可以安全地在堆栈上分配,那么您可以简单地将其声明为本地数组(这是您在原始代码中所做的),然后使用memset(arr, 0, sizeof arr)
将其设置为全零。
当然,在这两种情况下,您都可能在库函数内部实现一个隐藏的内存清零循环。在一般情况下,如果不使用循环,就不可能将大的内存区域设置为零。
如果您的编译器支持C99,那么您可以轻松地使用VLA;
int a, b;
printf("Enter size of array: ");
scanf("%d",&b);
int arr[b];
并在您的情况下使用内部循环或标准库函数memset
将其所有元素初始化为零。
memset(b, 0, sizeof(b));