我不需要在程序中指定数组的长度。相反,我 必须从控制台和动态I中获取数组输入(字符串) 必须为给定的输入数组分配内存。 你能帮我吗(用C语言)
答案 0 :(得分:0)
使用malloc
在阵列的堆上分配内存。
答案 1 :(得分:0)
E.g。
#include <stdio.h>
#include <stdlib.h>
char *getString(FILE* fp){
char *str;
int ch;
size_t len = 0, size = 16;
str = realloc(NULL, sizeof(char)*size);//size is start size
if(!str)return str;
while(EOF!=(ch=fgetc(fp)) && ch != '\n'){
str[len++]=ch;
if(len==size){
str = realloc(str, sizeof(char)*(size+=16));//expand size
if(!str)return str;
}
}
str[len++]='\0';
return realloc(str, sizeof(char)*len);
}
int main(void){
char *str;
printf("input string : ");
str = getString(stdin);
printf("%s\n", str);
free(str);
return 0;
}
答案 2 :(得分:-1)
C中的指针可用作数组。实际上,可以使用some_pointer[0]
代替*some_pointer
。因此,如果确保some_pointer指向具有所需大小的内存区域,则可以像使用数组一样使用该指针。您可以使用malloc
从内存管理器获取内存:
some_type *some_pointer;
some_pointer = (some_type *)malloc(sizeof(some_type) * size_of_your_array);
/* Some code that uses some_pointer[i] with 0 <= i < size_of_your_array */
free(some_pointer);
/* Some code NOT using the pointer */
请注意代码末尾的free
。这将释放内存。如果您没有使用free
,则在程序运行时(至少)会消耗内存。
进一步注意,不存储数组的大小信息(与数组相比,可以使用sizeof,因为数组大小是类型定义的一部分)。