转载

String Literal In C++

最近被一个很基本的知识点给咬伤,虽然之前知道这个问题,但是写代码的时候不小心还是容易犯错。简单记录一下。

提出问题

之前,代码里拥有如下数组:

const char *COLORS[3] = {"red",                          "black",                          "green"                         }; 

现在需要以追加的形式,添加一个yellow的颜色。粗心之下,我写成了:

const char *COLORS[4] = {"red",                          "black",                          "green"                          "yellow"                         }; 

在某处代码,我使用了COLORS[3],类似于

cout<<COLORS[3]<<endl;

程序执行后,就崩溃了。

分析问题

问题出在,在追加的代码中的第4行,漏掉了一个逗号!!!正确的形式应该是:

const char *COLORS[4] = {"red",                          "black",                          "green", //这里应该有个逗号!!!                          "yellow"                         }; 

在没有逗号下,编译器将”green”和”yellow”当做一个字符串,也就是”greenyellow”,因此,COLORS[2]其实是”greenyellow”,而COLORS[3]是未显式初始化的,为NULL。因此使用COLORS[3]程序崩溃。

解决问题

上面已经解决了问题。这里小小补充下:

在C++中,如下几种形式结果是一样的,表示的是同一个字符串”hello,world” :

"hello, world" 

"hello, " "world" 

"hello, / world" 

"hello, "  "w"  "orld" 

原文  http://www.yebangyu.org/blog/2016/04/10/stringliteralincpp/
正文到此结束
Loading...