我绝对是C游戏的新手,并希望通过以下代码片段获得一些帮助:
#include <stdio.h>
int main() {
int cases;
scanf("%d", &cases);
printf("%d", cases);
int i;
int *heights;
for(i=0; i<cases; i++){
scanf("%d", &heights[i]);
}
return 0;
}
我理解它是段错误,因为我给scanf
NULL
指针,所以有没有办法允许scanf
将值提供给此指针?或者是否有更好的方法可以从stdin
中获取可变数量的参数,而这些参数我完全没有?
答案 0 :(得分:7)
使用malloc
为heights
动态分配空间。
int *heights = malloc(cases*sizeof(int));
完成free
后,通过调用free(heights)
来指示heights
。
对于cases
的小值,您可以使用variable length arrays:
int heights[cases];
并且不要忘记以C99模式(-std=c99
)编译代码。
答案 1 :(得分:3)
高度指针不包含任何内存。首先,您必须根据需要使用malloc系统调用来分配内存。 在你的情况下malloc的语法 -
heights = (int *)malloc(cases*sizeof(int));
要记住一件事,在动态记忆位置之后你必须释放它。记忆免费 -
free(heights)