如何在不指定C中的数组大小的情况下动态初始化Array

时间:2013-06-18 07:10:02

标签: c

我不需要在程序中指定数组的长度。相反,我 必须从控制台和动态I中获取数组输入(字符串) 必须为给定的输入数组分配内存。 你能帮我吗(用C语言)

3 个答案:

答案 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,因为数组大小是类型定义的一部分)。