【发布时间】:2019-11-21 00:49:10
【问题描述】:
我最近尝试编写如下代码:
extern bool f(const char *const *b);
// SNIP
char *d[] = {/* SNIP */};
char *c[] = {/* SNIP */};
for(size_t i = 0; i < sizeof(d)/sizeof(char *); i++) {
c[1] = d[i];
f(c); // WARNING
}
所以这给出了一个警告
“你不能将char ** 分配给const char *const *”。
我明白为什么将char ** 分配给const char ** 是非法的:
const char *f = "cats";
const char **fp;
char *g;
fp = &g; // Let's pretend it's legal to assign char ** to const char **
*fp = f; // OK, assigning const char * to const char *
*g--; // OK, decrementing char -- but g == f!
printf("%s", f); // Prints "bats"
但是,如果我们将 char ** 分配给 const char *const *,则不会发生这种情况:
const char *f = "cats";
const char *const *fp = &f;
char *g;
fp = &g; // Let's pretend it's legal to assign char ** to const char *const *
*fp = f; // Illegal, assigning const char * to const char *const
*g--; // OK, decrementing char -- but g == f!
printf("%s", f); // Prints "bats" (though it won't compile)
所以问题是为什么存在这个要求,因为它不会引起问题。
(FWIW,我使用的是 C99。显然 C++11 允许这样做。)
【问题讨论】:
-
你能粘贴确切的错误信息吗?几乎可以肯定有重复的问题,但我找不到。
-
看来你应该可以使用
extern bool f(char * const * b);
标签: c