在程序运行时调整大小/大小数组的最佳方法

时间:2012-02-19 12:23:23

标签: c

我试图接受包含来自用户的一些整数值/字符串值的数组,并且不确定该数组将会有多长时间。如果我像数组[500]那样初始化,我知道它是一个穷人解决方案和糟糕的编程技巧..我如何改进这个?

以下示例代码:

int main(void){
    int t=0;
    char str[200];
    int  count[20];
    printf("Please enter the number of test cases(between 1 to 20):");
    scanf("%d",&t);
    for ( int i = 1; i<=t;i++)
    {
        printf("Please enter each of %i test case values:",i);
        gets(str);
        //set_create(str);
        printf("\n");
    }
    for(int i = 0;i<t;i++)
    {
        prinf("%i",count[i]);
        printf("\n");
    } 
    return 0;
}

上面的代码肯定是错的..需要一些帮助来改进代码...谢谢

编辑代码:

 int main(void){
        int T=0;
        int *count; 
        printf("Please enter the number of test cases(between 1 to 20):");
        scanf("%d",&T);
        count = malloc(T * sizeof *count);
        for ( int i = 1; i<=T;i++)
        {
            printf("Please enter each of %i test case values:",i);
            fgets(count);
            printf("\n");
        }

        return 0;
    }

2 个答案:

答案 0 :(得分:4)

根据需要使用指针和malloc / realloc内存。不要使用gets - 它不安全且不再符合标准。请改用fgets

例如,如果您不知道需要多少count个元素:

int *count;

scanf("%d", &t);
count = malloc(t * sizeof *count);

答案 1 :(得分:1)

在这种情况下,您可以在函数malloc/calloc的堆中为数组分配内存,或在函数alloca()的堆栈中分配内存(在标题"alloca.h"中);