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