我有以下情况:

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,则会崩溃,因为我尚未分配内存。我可以去分配它,然后将value1的内容复制到数组中,但是我没有上面的示例中的2个值,我有50个。

有没有一种方法可以初始化theValues而不用在数组中分配每个元素并在解密后手动复制值?

谢谢。

最佳答案

你可以声明你的数组

  static char *theValues[2];


然后它有两个空指针,因为它是静态的。您可以用例如

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


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

10-06 12:47