c - C 中用户定义的数组元素和数组大小

标签 c arrays

我对 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/

相关文章:

c - 具有返回类型 typedef 结构的函数在 VS2015 中不起作用

java - 从不同的Android项目调用c程序

c - c 中多维数组的指针

Javascript数组对象到逗号分隔的单行数组

Java编程,寻找数组中某个键的连接

arrays - Postgresql将json数组选择成行和单个文本

c++ - 为什么使用对象进行编程不被认为是程序性的?

c - 为什么 GCC 会给我 -Wjump-misses-init 警告?

C(动态)数组(固定大小)

java - 按升序对包含空值的数组进行排序