Yebangyu's Blog

Fond of Concurrency Programming , Distributed System and Machine Learning

String Literal In C++

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

提出问题

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

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

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

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

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

cout<<COLORS[3]<<endl;

程序执行后,就崩溃了。

分析问题

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

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

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

解决问题

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

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

1
"hello, world"
1
2
"hello, "
"world"
1
2
"hello, \
world"
1
"hello, "  "w"  "orld"