2013-05-27 86 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