2013-05-27 114 views
11

我正在使用字符串。已棄用將字符串常量轉換爲'char *'的c

每當我執行下面的程序我在C *上線char *p = "hello"

得到一個錯誤的棄用轉換從字符串常量「字符」我在做什麼錯?

這個錯誤是什麼意思?我該如何糾正它?

我的代碼是:

#include<stdio.h> 
int main() 
{ 
    char *p = "hello"; 
    printf("%s",p+1); 
    return 0; 
} 
+2

沒有錯誤,但可能是警告......因爲字符串文字'字符常量*'類型 –

+1

爲const char * p =「你好」 –

+0

@ user2227862還閱讀這個:http://en.wikipedia.org/wiki/Const-correctness –

回答

16

這應該是一個警告(雖然你可能已經設置你的編譯器警告視爲錯誤,這往往是一個好主意)。

你想要的是:char const *p = "hello";改爲。

試圖修改字符串文字會導致未定義的行爲。 const可防止您無意中這樣做(即,除非您刪除const限定符,例如通過強制轉換,否則試圖通過指針寫入的代碼將不會編譯。

5

這是一個警告,因爲「Hello」字符串是一個常量,您試圖將其存儲在非常量字符*中。上懸而未決的問題要麼使之

const char* p = "Hello"char[] p = "Hello"

+0

不是'const char * p',而是'char const * p'一些組合可能會讓你爲'const char *'着想'' –

+4

@GrijeshChauhan:一個編譯器*可能*會爲幾乎任何(或沒有)原因產生一個警告,但是我對於在類型之前放置'const'而不是after之後至少有一點驚訝。該標準要求/兩者都要被接受。 –

+1

@GrijeshChauhan你可以指定哪個編譯器。因爲const char和char const都是一樣的我認爲 – Daemon