使用非常量值初始化字符串数组

时间:2011-12-27 18:34:44

标签: c arrays

我有以下情况:

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

这当然会导致错误initializer is not a constant。 函数decrypt()解密用户配置文件中的值并返回char*。然后我有一个for循环,它将检查theValues的每个值,并将其与搜索字符串列表进行比较。

如果我删除了初始化,然后尝试将value1value2复制到theValues,它会崩溃,因为我没有分配内存。我可以去malloc它然后将value1等的内容复制到数组中,但是我没有2个值,如上例所示,我有50个。

有没有办法初始化theValues而不必对阵列上的每个元素进行malloc并在解密后手动复制值?

感谢。

2 个答案:

答案 0 :(得分:1)

static char *theValues[2];

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

答案 1 :(得分:1)

您可以声明您的数组

  static char *theValues[2];

然后它有两个空指针,因为它是静态的;你可以填写它。

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

测试确保(假设decrypt不返回空指针)初始化发生一次。当再次调用相同的包含函数时,只重新执行测试,而不是初始化。