作者:牛奶香橙 | 来源:互联网 | 2022-12-07 17:29
我正在尝试在C中插入元素程序.我需要将VARIABLE SIZED ARRAY初始化为0,但编译器不允许我这样做.任何出路?
#include
void insert(int arr[],int k,int pos,int n)
{
display(arr,n);
int i=n-1;
if(pos=pos) {
arr[i]=arr[i-1];
i--;
}
arr[pos]=k;
display(arr,n);
} else {
printf("\n !!Array full!!");
return 0;
}
}
void display(int arr[],int n)
{
int i;
printf("\n Displaying array elements: ");
for(i=0;i
我试过的时候
int arr[n]={0};
它显示一个错误,无法将可变大小的数组初始化为0.
前卫的输出
输入位置:2
显示数组元素:2 5 3 -344174192
显示数组元素:2 4 5 3
继续(y/n):
...程序以退出代码结束0
按ENTER退出控制台.
垃圾值以粗体显示.
1> tilz0R..:
使用memset
清除您的数组:
memset(arr, 0x00, sizeof(arr));
当使用带有VLA的sizeof时,sizeof的结果不会在编译时进行评估,因此它非常适合使用.
编辑:虽然您当前的方法有效,但我强烈建议您远离 VLA,以防您需要VLA,使用malloc
和free
功能.这将显着减少堆栈溢出的变化,当n
大数字时.
#include "stdlib.h"
int main() {
int* arr;
int n;
//Get n value by input
arr = malloc(sizeof(*arr) * n);
if (arr == NULL) {
//No memory available, stop program
}
memset(arr, 0x00, sizeof(*arr) * n);
//Do you job here just like before using VLA
//At the end, before returning, call free function
free(arr);
}
仅供参考,VLA代表可变长度阵列.