為何在 C 語言中,char ** 無法安全轉換為 const char **?
最近在寫程式時,發現當我把一個 char **
型態的變數,傳到一個 const char **
型態的參數時,出現了以下的警告:
passing 'char *[257]' to parameter of type 'const char **' discards qualifiers in nested pointer types
將 char *
型態轉換為 const char *
是安全的,那為何會這樣呢?
那是因為 char **
會含有 char *
,因此有可能可以透過其他 char *
去修改 const char *
中的值
以下是一個簡單的範例:
const char *bin = "/bin/sh";
char *argv[256];
const char **cargv = argv; // Warning! Assigning char ** to const char **
cargv[0] = bin; // perfectly legal; `cargv` and `bin` both are "char const"
*argv[0] = 0; // Boom!