2016-10-24 75 views
1
char a[MAX_NR_DIGITS] = {5, 2, 1, 3, 5, 0, 7, 3, 4, 4}; 
int sizeA = 10; 
char n[MAX_NR_DIGITS] = {5, 2, 6}; 
int sizeN = 3; 

它返回兩倍的錯誤:可變大小的對象可能未初始化。 我該如何解決這個問題?C數組錯誤:可變大小的對象可能未被初始化

+2

什麼是'MAX_NR_DIGITS'?你從哪裏得到錯誤?你可以請嘗試一個[最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve)並告訴我們?並且在構建時包含完整且完整且未經編輯的錯誤輸出? –

+0

你使用什麼開發環境? –

+1

我想'MAX_NR_DIGITS'不是一個常量。這只是一個_guess_因爲你不告訴我們什麼'MAX_NR_DIGITS'是 –

回答

1

如果這些數組在本地作用域聲明,並且MAX_NR_DIGITS不是編譯時常量,則C將嘗試創建可變長度數組(VLA)。這是一個在運行時確定其大小的數組。

避免這種情況的最簡單方法是,如果它是無意的,則確保MAX_NR_DIGITS是編譯時常量,如#define MAX_NR_DIGITS 10

當數組是VLA時代碼不工作的原因是因爲初始化器列表僅在編譯期間使用。因此C語言有一個要求,即VLA不能被初始化。

對於VLA您可以輕鬆地解決這個問題通過指定數組中的運行時間,而不是一個值:

memcpy(n, &(char[3]){5, 2, 6}, 3); 
相關問題