我知道以下是糟糕的编程习惯
char * p1 = "myBad" ;
上面的错误是const“myBad”内存被非Const指针指向。编译器允许p1支持与C
的向后兼容性以下是一种不好的做法吗?
char p2[]="myBadORGood";
p1和p2之间的区别是什么。编译器是否为p2制作了非const副本?我想我读到的地方p2很好但不确定..
答案 0 :(得分:3)
p2
由字符串文字初始化,即它是字符串文字的副本,因此p2
非 - const
很好:< / p>
char p2[]="myGood";
答案 1 :(得分:0)
第一个不仅是糟糕的做法,而且在C ++中已弃用(C ++ 03;根据克里斯的评论,这甚至非法现在在 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';
(但不要写那样的代码!^^)