【发布时间】:2017-10-19 15:56:36
【问题描述】:
我知道这个问题看起来很奇怪,但我需要在 C 中初始化(或转换)一个常量字符串数组。
问题是字符串数组是动态初始化的,但我想使用的 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 限定符。
【问题讨论】:
-
您能否说明 API 仅接受常量字符串数组的方式?是不是刚刚声明了
const char,那么你也可以传递char数组。还是测试字符串所在的内存区域? -
如果函数参数有
const修饰符,仅表示该函数不会改变您传递的数据。 IE。您可以轻松地传递动态分配的数组。 -
@KarstenKoop API 请求的参数是
char const *const * inames,如果我尝试传递一个字符串数组 gcc 说:expected ‘const char * const*’ but argument is of type ‘char **’ -
@EliKorvigo 但有来自 gcc 的警告
expected ‘const char * const*’ but argument is of type ‘char **’:/ -
const char *names3[len]; ... sprintf(names3[j],"%s%d","test",j);是错误代码。