0

我知道以下是不好的编程习惯

char * p1 = "myBad"  ;  

上述情况很糟糕,因为 const "myBad" 内存被非 Const 指针指向。编译器允许 p1 as 支持与 C 的向后兼容性

以下也是一种不好的做法吗?

char p2[]="myBadORGood";

p1 和 p2 之间有什么区别。编译器是否为 p2 制作非常量副本?我想我在某处读到 p2 很好但不确定..

4

2 回答 2

3

p2由字符串字面量初始化,即它是字符串字面量的副本,因此p2const- 很好:

char p2[]="myGood";
于 2013-05-24T15:54:16.183 回答
0

第一个不仅是不好的做法,而且在 C++ 中已被弃用(C++03;根据 chris 的评论,这在C++11中甚至是非法的)。

第二个很好,字符串文字仅用作(只读)“模型”来初始化一个新的独立数组。因此,短

char arr[] = "abc";

相当于更长的

char arr[] = { 'a', 'b', 'c', '\0' };

甚至可以这样写:

char arr[4];
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
arr[3] = '\0';

(但不要写那样的代码!^^)

于 2013-05-24T17:47:26.600 回答