我对 C 编程非常陌生,正在自学。我想编写一段代码,要求用户输入一些数字并将它们存储到数组中。如果用户输入“q”,程序将停止。然后它应该打印数组并告诉用户该数组中有多少个数字。 (长度)
我编写了以下代码,但是如果我将 int array[]; 留空,它就不起作用(显然)。我也无法定义它,因为它取决于用户输入的数字数量......我通过互联网搜索了很多,并遇到了 malloc 和 calloc。我尝试在这里使用它们,但老实说我不知道如何使用,而且我已经在这段代码上呆了几天了。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[]; //I want to leave this empty but C doesn't allow me to.
int len=sizeof(array)/sizeof(array[0]);
for(int a=0;a<len;a++)
{
printf("Enter element %d: ", a);
scanf("%d",&array[a]);
if(getchar()=='q')
break;
}
printf("Array: [");
for(int a=0;a<len-1;a++)
{
printf("%d, ", array[a]);
} printf("%d]", array[len]);
printf("\nArray length: %d\n", len);
return 0;
}
int array[5] 的示例输出;
Enter element 0: 1
Enter element 1: 2
Enter element 2: 3
Enter element 3: 4
Enter element 4: 5
Array: [1, 2, 3, 4, 5]
Array length: 5
非常感谢任何帮助。谢谢,祝你有美好的一天。
最佳答案
Malloc 和 calloc 函数允许您动态地为变量分配内存。
我认为如果您使用 int 指针( int*
)而不是 int []
,效果会更好。 。
你可以做这样的事情
int * array = malloc (sizeof(int)); //this will allocate enough memory for 1 int element
Len = 1;
然后在循环结束时,如果用户没有输入“q”,您可以执行类似的操作
len ++ ;
array = realloc(array,len*sizeof(int)); //this will reallocate memory for your int pointer
然后在代码末尾,您必须像这样自由调用该函数:free(array);
释放分配的内存。
编辑:在 for 循环之后,您正在访问不应该在 array[len]
中的内存。 。
我认为你应该将其更改为 array[len-1]
关于c - C 中用户定义的数组元素和数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527814/