2015-09-26 126 views
0

我在C中編寫了下面的代碼。由於數組大小不能動態分配,我期望錯誤消息。但代碼編譯。但是myArray1的結果大小是荒謬的。我不確定它爲什麼編譯。我正在使用codeblock和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]))); 
+0

不檢查規範,它可能適用於C11,它可能包含在GCC擴展中。 – MikeCAT

+0

printf(「a =%d \ tSize myArray1 =%d」,a,(sizeof(myArray2)/ sizeof(myArray2 [0]))); –

+0

更安全的更正:'printf(「a =%d的值\ myArray1 =%u的大小」,a,(unsigned int)(sizeof(myArray2)/ sizeof(myArray2 [0]))); ' – MikeCAT

回答

2

C99標準支持堆棧上的可變大小數組。

這裏是其上的gcc docs

可變長度自動數組被允許在ISO C99,並作爲擴展GCC接受他們在C90模式和C++。這些數組與其他自動數組一樣聲明,但是其長度不是常量表達式。存儲在聲明點處分配,並在包含聲明的塊作用域退出時解除分配。