为什么将`char **'强制转换为`const char **`是不安全的?

时间:2013-11-13 05:47:49

标签: c pointers

编译此程序:

#include <stdio.h>

void main() {
    char *s = "helo";
    char **sp = &s;
    const char **csp = sp;
    const char *cs = *csp;
    printf("%s\n", cs);
}

得到警告:

cc.c: In function ‘main’:
cc.c:6:24: warning: initialization from incompatible pointer type [enabled by default]
     const char **csp = sp;

2 个答案:

答案 0 :(得分:1)

char **sp

  

sp是指向char的指针,sp,* sp和** sp都是   可变

const char **csp

  

csp是指向const char的指针,csp和* csp是   可变,但** csp是const

现在让我们看看为什么const char** csp = sp不安全。

const char Imconst = 'A';
char* ImMutable;
const char** ImConstPtr = &ImMutable;  // This is illegal but if it is allowed
*ImConstPtr  = &Imconst;
*ImMutable = '1'; // We are trying to assign to "Imconst"

希望这可以解除疑问。

答案 1 :(得分:0)

警告是因为char **和const char **不相等。为了正确,您可以修复原型(被调用者),或修复调用者(const char *)。

http://c-faq.com/ansi/constmismatch.html

找到精彩的文章