我想编写一个程序,提示用户输入一个整数,并且我希望列表的大小恰好是该整数。这是我的尝试:
int main(void){
int target;
printf("Enter # of elements in list: ");
printf("\n");
scanf("%d", &target);
// Initialize List
int list[target];
// Code to populate list from 1 to target here
return 0;
}
我收到一条错误消息,指出大小争论必须是一个常数值,有没有办法解决这个问题,或者我是否被迫定义最大大小?
最佳答案
您可以在 C99(或更高版本)中执行此操作,但您的编译器可能默认设置为 C89/C90/ANSI-C。尝试在命令行中传递 -std=c99
。
如果您的编译器不支持 C99 模式,您将需要通过 malloc
使用动态分配:
int * list = malloc(target * sizeof *list);
你应该检查 list
是否不是 NULL
,以防 malloc
失败并且不要忘记调用 free (list)
完成后!
请注意,您已将 list
定义为 int
,并且您正在使用 scanf("%d")
读取它所以它可以是一个负值。这可能会导致一些 undesirable behaviour .因此考虑将声明更改为 size_t
(malloc
和 VLA's 期望的类型)。然后使用 %zu
(如果 %zu
不可用,则使用 %u
)而不是 %d
读取它.
最后,您应该检查 scanf
的返回值以确保您的值被正确读取,如果它少于您想要读取的值的数量(在您的情况下为 1),它将意味着该值未被读取并且您的 target
的内容保持不变。在您的情况下,target
将具有未定义的内容,因此如果用户未输入有效数字,您的程序将调用未定义的行为。
关于c - 通过 scanf 定义列表的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22288068/