鉴于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)