【发布时间】:2015-09-26 14:47:35
【问题描述】:
我用 C 编写了下面的代码。由于无法动态分配数组大小,因此我预计会出现错误消息。但是代码可以编译。但是 myArray1 的结果大小是荒谬的。我不确定它为什么会编译。我正在使用代码块和 minGW。
int a;
printf("Enter the value for a\n");
scanf("%d",&a);
int myArray2[a];
printf("value of a = %d\tSize of myArray1 = %d",(sizeof(myArray2)/sizeof(myArray2[0])));
【问题讨论】:
-
不检查规范,可能对C11有效,可能包含在GCC扩展中。
-
这里更正 printf("value of a = %d\tSize of myArray1 = %d",a, (sizeof(myArray2)/sizeof(myArray2[0])));
-
更安全的修正:
printf("value of a = %d\tSize of myArray1 = %u",a, (unsigned int)(sizeof(myArray2)/sizeof(myArray2[0]))); -
第二个参数应该是
%zu,而不是%d或%u。 -
最好当心
标签: c mingw codeblocks