我试图接受包含来自用户的一些整数值/字符串值的数组,并且不确定该数组将会有多长时间。如果我像数组[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;
}
答案 0 :(得分:4)
根据需要使用指针和malloc / realloc内存。不要使用gets
- 它不安全且不再符合标准。请改用fgets
。
例如,如果您不知道需要多少count
个元素:
int *count;
scanf("%d", &t);
count = malloc(t * sizeof *count);
答案 1 :(得分:1)
在这种情况下,您可以在函数malloc/calloc
的堆中为数组分配内存,或在函数alloca()
的堆栈中分配内存(在标题"alloca.h"
中);