我有以下情况:
char *value1 = decrypt(somestring);
char *value2 = decrypt(somethingelse);
static char *theValues[2] = {value1, value2};
当然,这会导致错误
initializer is not a constant
。函数
decrypt()
从用户的配置文件中解密一个值,并返回一个char*
。然后,我有一个for循环,它将检查theValues
的每个值并将其与搜索字符串列表进行比较。如果我删除了初始化,然后尝试将
value1
和value2
复制到theValues
,则会崩溃,因为我尚未分配内存。我可以去分配它,然后将value1的内容复制到数组中,但是我没有上面的示例中的2个值,我有50个。有没有一种方法可以初始化
theValues
而不用在数组中分配每个元素并在解密后手动复制值?谢谢。
最佳答案
你可以声明你的数组
static char *theValues[2];
然后它有两个空指针,因为它是静态的。您可以用例如
if (!thevalues[0])
thevalues[0] = decrypt(somestring);
if (!thevalues[1])
thevalues[1] = decrypt(somethingelse);
测试确保(假设
decrypt
不返回空指针)初始化发生一次。当再次调用相同的包含函数时,仅重新执行测试,而不重新初始化。