我知道这个问题似乎很奇怪,但我需要在C语言中初始化(或转换)一个常量字符串数组,内容涉及IT技术。
问题在于,字符串数组是动态初始化的,但我想使用的API函数只接受常量字符串数组。
我知道这样可以解决问题:
const char *const arr[] = { "test" };
但是:由于我不知道数组会有多少项,也不知道内容预运行时是什么,所以我不能用那种方式初始化数组。
因此,这当然行不通。
const char *const arr[1];
arr[1] = "test"; // won't work
我的问题是:是否有可能将动态字符串数组转换为只读的?或者有没有一种方法可以动态地初始化数组?
编辑1:我的确切问题是什么?
int len = 8;
const char *names1[8] = {"test0","test1","test2","test3","test4","test5","test6","test7" }; // not what I'm looking for
const char *names2[len];
const char *names3[len];
// nearly what I'm looking for
for(int j=0; j<len; j++) {
names2[j] = "test";
}
// exactly what I'm looking for
for(int j=0; j<len; j++) {
sprintf(names3[j],"%s%d","test",j); // discards 'const' qualifier
}
// ...
Cudd_DumpDot(gbm, 1, ddnodearray, names1, NULL, outfile);
Cudd_DumpDot(gbm, 1, ddnodearray, names2, NULL, outfile);
Cudd_DumpDot(gbm, 1, ddnodearray, names3, NULL, outfile); // won't work
好的,这是我目前的进展。
使用names2
方法确实有效,但我想使用sprintf
(如names3
中所示),因为在这种情况下我需要附加j
。但这将伤害const
限定符。
const char
,然后也可以传递char
数组。还是它会测试字符串所在的内存区域? - Karsten Koopconst
修饰符,那么它只意味着该函数不会改变您传递的数据。也就是说,您可以轻松地将动态分配的数组按原样传递。 - Eli Korvigochar *
,而代码中的arr
元素是const char *
。因此,您在评论中的目标与问题说明不同。最好发布您真正失败的代码。 - chux - Reinstate Monicaconst char *names3[len]; ... sprintf(names3[j],"%s%d","test",j);
是糟糕的代码。 - chux - Reinstate Monica