根据输入大小创建一个数组

时间:2019-12-05 16:59:39

标签: c arrays

我对C还是很陌生,我想读取用户输入(通常是一些句子或字符串),然后我想根据输入长度创建一个数组。有合理的方法吗?感谢您的回答

4 个答案:

答案 0 :(得分:1)

malloc / free,如果是字符串,则strlen会使长度变长。

答案 1 :(得分:1)

仅概述为什么所有答案都建议使用指针而不是数组:

当我学习C时,有一点帮助是理解数组和指针以及它们之间的相似程度。

在大多数情况下,它们可以具有相同的语法,您可以将*语法与任一语法一起使用,或者将[]语法与其中任一语法一起使用。

区别是:

1)数组已由系统为其分配了内存,而指针没有,您必须将指针“设置”为已分配的某些内存。

2)我不认为数组可以更改数组指向的位置,它们始终指向其预先分配的位置。

由于数组是预先分配的,因此无法重新指向,因此需要一个指针。您可以将其完全视为数组(可以使用[]语法),但必须首先为其分配内存。

因此,例如,如果具有和p的数组是指针,则a [0] = 1,* a = 1,p [0] = 1和* p = 1都是相同的函数,而* ++ p = 1是有效的,我不认为* ++ a = 1是有效的,因为您不能更改点的位置。

因此,简短的版本是,您需要一个指针,而不是一个数组,并且要更改分配的数量,请分配新的大小(使用malloc或类似的东西),复制要保留的内容并释放旧空间(或者您可以增加第一个的大小-realloc ?,不确定我的C已经有几十年了)

答案 2 :(得分:0)

您可以使用malloc来分配新的内存,请注意,由于C的内存不受管理(与Java,Python或任何其他高级语言相反),您将拥有使用完后释放内存。

int arr_size = 0;
int* arr;
printf("Please enter a size to the array:");
scanf("%d", &arr_size);
arr = malloc(arr_size * sizeof(int))
// Use array
free(arr);
  

void *malloc(size_t size);

     

malloc()函数分配大小字节并返回指向   分配的内存。内存未初始化。如果size为0,   然后malloc()返回NULL或可以   稍后将其成功传递给free()。​​

答案 3 :(得分:0)

这取决于您要编译的标准和编译器。您只能依赖C99

中的可变长度数组

可以肯定的唯一方法是使用malloc,尽管此后您需要确保自己free

int length;

// Do something to set the size

// Allocates a contiguous block of memory that is
// (length * size of a char primitive) in length
char *array = (char *)malloc(length * sizeof(char));

// Do whatever you need do to with the array

free(array);

在C语言中,将变量声明为指针(char *a)和数组(char a[3])可使您以完全相同的方式使用该变量。唯一的区别是,使用指针时,您需要自己分配和释放内存,而使用数组时,会自动将内存块分配给您,并在超出范围时将其释放。

使用上面的代码,您仍然可以通过索引访问每个单独的字符,如下所示:

array[0] = 'f';
array[1] = 'o';
array[3] = 'o';