我有以下情况:
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
,它会崩溃,因为我没有分配内存。我可以去malloc它然后将value1等的内容复制到数组中,但是我没有2个值,如上例所示,我有50个。
有没有办法初始化theValues
而不必对阵列上的每个元素进行malloc并在解密后手动复制值?
感谢。
答案 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
不返回空指针)初始化发生一次。当再次调用相同的包含函数时,只重新执行测试,而不是初始化。