-3

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

4

3 回答 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 回答