我正在使用字符串。已棄用將字符串常量轉換爲'char *'的c
每當我執行下面的程序我在C *上線char *p = "hello"
得到一個錯誤的棄用轉換從字符串常量「字符」我在做什麼錯?
這個錯誤是什麼意思?我該如何糾正它?
我的代碼是:
#include<stdio.h>
int main()
{
char *p = "hello";
printf("%s",p+1);
return 0;
}
我正在使用字符串。已棄用將字符串常量轉換爲'char *'的c
每當我執行下面的程序我在C *上線char *p = "hello"
得到一個錯誤的棄用轉換從字符串常量「字符」我在做什麼錯?
這個錯誤是什麼意思?我該如何糾正它?
我的代碼是:
#include<stdio.h>
int main()
{
char *p = "hello";
printf("%s",p+1);
return 0;
}
這應該是一個警告(雖然你可能已經設置你的編譯器警告視爲錯誤,這往往是一個好主意)。
你想要的是:char const *p = "hello";
改爲。
試圖修改字符串文字會導致未定義的行爲。 const
可防止您無意中這樣做(即,除非您刪除const
限定符,例如通過強制轉換,否則試圖通過指針寫入的代碼將不會編譯。
這是一個警告,因爲「Hello」字符串是一個常量,您試圖將其存儲在非常量字符*中。上懸而未決的問題要麼使之
const char* p = "Hello"
或char[] p = "Hello"
不是'const char * p',而是'char const * p'一些組合可能會讓你爲'const char *'着想'' –
@GrijeshChauhan:一個編譯器*可能*會爲幾乎任何(或沒有)原因產生一個警告,但是我對於在類型之前放置'const'而不是after之後至少有一點驚訝。該標準要求/兩者都要被接受。 –
@GrijeshChauhan你可以指定哪個編譯器。因爲const char和char const都是一樣的我認爲 – Daemon
沒有錯誤,但可能是警告......因爲字符串文字'字符常量*'類型 –
爲const char * p =「你好」 –
@ user2227862還閱讀這個:http://en.wikipedia.org/wiki/Const-correctness –