在C语言中用两个字符串初始化一个const char * const *。

3

有人知道用两个字面字符串("abcdefg""hijklmnop")来初始化一个const char * const *的正确方法吗?我读过从char **转换比较困难/不可能,但我可能错了。

非常感谢任何帮助。


你想要一个常量指针数组,指向常量字符串吗? - alk
2个回答

10

不要使用指向指针的指针,而是使用指针数组并像这样初始化它们:

const char * const strs[] = {"abcdefg", "hijklmnop"};

因此,现在您拥有一个指向字符串常量的常量数组,而不是指向字符串常量的常量指针。C语言不允许使用大括号初始化指针(除非它们中只有一个值),但它允许以这种方式初始化数组。


但是你刚才发布的确实是指针...或者更准确地说是指针数组。 - Lundin

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 **


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接