我不需要在程序中指定数组的长度。相反,我必须从控制台获取数组输入(字符串),并且我必须动态地为给定的输入数组分配内存。你能帮帮我吗?(C语言)
问问题
1746 次
3 回答
0
用于malloc
在堆上为您的数组分配内存。
于 2013-06-18T07:11:08.820 回答
0
例如
#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;
}
于 2013-06-18T08:19:20.090 回答
-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 的数组相反,因为数组大小是类型定义的一部分)。
于 2013-06-18T07:17:14.737 回答