2011-12-27 10 views
0

ない値で、文字列の配列を初期化:もちろんは、私は次のシナリオを持って、一定

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

これはエラーinitializer is not a constantが発生します。 関数decrypt()は、ユーザーの設定ファイルから値を復号化し、char*を返します。私はその後、theValuesの各値をチェックし、それを検索文字列のリストと比較するfor-loopを持っています。

初期化を削除してから、value1value2theValuesをコピーしようとすると、メモリが割り当てられていないためクラッシュします。私は行ってmallocし、配列にvalue1などの内容をコピーすることができますが、私は上記の例のように2つの値を持っていません、私は50です。

theValuesを初期化する方法はありますか配列の各要素をmallocし、復号化後に手動で値をコピーしますか?

ありがとうございました。

+0

"初期化を削除してから、value1とvalue2をtheValuesにコピーしようとすると、メモリが割り当てられていないためクラッシュします。"あなたはこれをどうやって見せてくれますか?これはうまくいくはずです。 – Mysticial

答えて

1

あなたは、アレイ

static char *theValues[2]; 

を宣言することができ、それは静的であるため、それから、2つのヌルポインタを持っています。あなたはそれを例えば次のように入力することができます。

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

試験は、初期化が一旦起こる(decryptと仮定するとNULLポインタを返さない)ことを確認してください。同じcontains関数が再び呼び出されると、初期化ではなくテストだけが再実行されます。

+0

それはそれをしました。私はポイントをコピーするのとは対照的に、それぞれをstrcpyしようとしていました。まことにありがとうございます。 –

1
static char *theValues[2]; 

theValues[1] = decrypt(somestring); 
theValues[2] = decrypt(somethingelse); 
関連する問題