为什么这允许从(char*)到(const char*)的升级?

ojb*_*ass 4 c

鉴于scanf在Microsoft文档中有(const char*)以及这个问题的答案当我为(char**)促销(const char**)做同样的事情时会发生什么?

基本上为什么要编译?

#include <stdio.h>
int main(int argc, char **argv)
{   
    char szArray[50];
    int  i = 0;
    strcpy(szArray,"10");
    /* the following code is upcasting the (char *) to (const char *) */
    sscanf(szArray,"%d",&i);
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

为什么不编译呢?

#include <stdio.h>
void processargs(const char **p)
{ 
}
int main(int argc, char **argv)
{
    processargs(argv);          
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

两者似乎对指针做同样的事情!

aru*_*rul 12

char** -> const char **是危险的,因为你最终可能会意外地修改底层const对象.

写下你想要的正确方法是:

void processargs(const char * const *p)
{ 
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该公开这种方式使用const.我不认为很多人都知道你可以做到这一点. (3认同)