2011-12-27 69 views
0

我有以下情形:初始化字符串數組與不是恆定的值

char *value1 = decrypt(somestring); 
char *value2 = decrypt(somethingelse); 
static char *theValues[2] = {value1, value2}; 

這當然會導致錯誤initializer is not a constant。 函數decrypt()解密用戶配置文件中的值並返回char*。然後我有一個for循環,它將檢查theValues的每個值並將其與一系列搜索字符串進行比較。

如果我刪除初始化,然後嘗試複製value1value2theValues它崩潰,因爲我沒有分配內存。我可以去malloc它,然後將value1等的內容複製到數組中,但是我沒有上述示例中的2個值,我有50.

是否有方法可以初始化theValues而不必malloc中的每個元素,並手動複製解密後的值?

謝謝。

+0

「如果我刪除初始化,然後嘗試將value1和value2複製到值,它會崩潰,因爲我沒有分配內存。」你能告訴我們你是怎麼做到的嗎?這應該工作。 – Mysticial 2011-12-27 18:37:17

回答

1

你可以宣佈你的陣列

static char *theValues[2]; 

然後它有兩個空指針,因爲它是靜態的;並且你可以用例如

if (!thevalues[0]) 
     thevalues[0] = decrypt(somestring); 
    if (!thevalues[1]) 
     thevalues[1] = decrypt(somethingelse); 

測試確保(假設decrypt不返回一個空指針)的初始化發生一次。當再次調用相同的包含函數時,只重新執行測試,而不是初始化。

+0

這樣做。我試圖強化每一個,而不是複製點。萬分感謝。 – 2011-12-27 18:47:13

1
static char *theValues[2]; 

theValues[1] = decrypt(somestring); 
theValues[2] = decrypt(somethingelse);