是否有人知道使用两个文字字符串(const char * const *
和"abcdefg"
)初始化"hijklmnop"
的正确方法?我读到很难/不可能从char **
转换,但我可能错了。
任何帮助都非常感激。
答案 0 :(得分:10)
而不是指针指针,使用指针数组并像这样初始化它们:
const char * const strs[] = {"abcdefg", "hijklmnop"};
因此,不是指向字符串常量的常量指针,而是现在有一个常量数组到字符串常量。 C不允许使用大括号初始化指针(除非它们中只有一个值),但它允许以这种方式初始化数组。
答案 1 :(得分:0)
在C99及以上版本中,您可以使用复合文字来创建数组,并将其用作指针的初始化器。
const char * const *p = (const char *[]){"abcdefg", "hijklmnop"};
这相当于使用Kninnug的答案中的命名数组,加上一个带有初始化器的指针,该初始化器按名称指向数组:
const char * const strs[] = {"abcdefg", "hijklmnop"};
const char * const *p = strs;
除了数组中有一个名称(strs
)并且另一个是匿名的事实。
并且我还要补充一点,这些解决方案都不涉及将char **
转换为const char * const *
。构造它们的方式,每个char *
由于被用作单独为const char *
的数组元素的初始值设定项而单独转换为const char *
。代码中没有char **
个。