【问题标题】:Initialise a const char * const * with two strings in C在 C 中用两个字符串初始化一个 const char * const *
【发布时间】:2013-12-23 18:45:45
【问题描述】:

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

非常感谢任何帮助。

【问题讨论】:

  • 所以你想要一个指向常量“字符串”的常量指针数组?

标签: c pointers char initialization constants


【解决方案1】:

使用指针数组代替指针,并像这样初始化它们:

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

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

【讨论】:

  • 但是你刚刚发布的指针......或者更确切地说是一个指针数组。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2015-01-04
    • 2022-01-17
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多