2015-06-22 20 views
-1

据我所知,下面的代码不应该工作。然而,不知何故,这在我的编译器中是确定的。请有人解释。意外的C字符串定义行为

int main() 
{ 
    char *string; 
    string = "Goo"; 
} 
+4

**为什么**你以为它不会“工作”?这是您以某种方式省略的问题中最重要的部分。 – AnT

+1

代码应该是'const char * string;'。当引入'const'时,“应该是”没有被指定,因为它被认为会破坏以前的代码。 – chux

回答

3

据我知道下面的代码不应该工作

我怕,你的信息是错误的。

char *string; 
string = "Goo"; 

是完全有效的。这基本上是,

  1. 定义一个char指针string
  2. 字符串文字的基地址"Goo"写入string

然而,代替作为一个char指针,如果string本来的阵列,则这将是不可能作为阵列的不被分配(除了定义时间虽然括号括起来的列表)可以

+2

由于遗留原因,“Goo”不是'const',除非你的编译器是gcc并且你明确地告诉它使它们成为const。 – Medinoc

+1

@Medinoc ....(只是为了完整性),但是,(试图)修改它们是无论如何[未定义行为](https://en.wikipedia.org/wiki/Undefined_behavior)。 –

+1

'-Wwrite-strings'是什么改变字符串文字有'const char *' – o11c