如何解决C ++指针说明
|char* pstr[] = { \"Robert Redford\",// Initializing a pointer array
\"Hopalong Cassidy\",\"Lassie\",\"Slim Pickens\",\"Boris Karloff\",\"Oliver Hardy\"
};
如果我这样写:
*pstr[0] = \'X\';
该程序可以编译,但是在执行该语句时崩溃。为什么?我以为* pstr [0]是\'R \',所以我可以从\'R \'更改为\'X \'。
谢谢!
解决方法
编译器应该警告您:
warning: deprecated conversion from string constant to \'char*\'\'
您在这里所做的就是向可变的char指针分配一些常量char数组,就像:
const char[] astring = \"ababa\";
char* mutablestring = astring; // shouldn\'t be possible
mutablestring[0] = \'o\'; // change \'readonly\' location
结果是在运行时指向您二进制文件的指针,并且您正在写入该指针。但是那是只读内存,所以..崩溃。
,您正在建立指向4个数组的指针。因此pstr [0]指向const char*
,并且您无法更改其值。
以这种方式编写此代码是一种好的编程习惯,因此,如果尝试更改值而不是运行时错误,则会出现编译器错误:
char* const pstr[] = { \"Robert Redford\",// Initializing a pointer array
\"Hopalong Cassidy\",\"Lassie\",\"Slim Pickens\",\"Boris Karloff\",\"Oliver Hardy\"
};
,字符串文字是常量,因此您无法更改它们。
允许从const char*
转换为char*
只是为了允许从Cconst
之前的时间开始使用旧的C代码。
,pstr
是具有const *char
个元素的数组。修改只读存储器的结果是不确定的。如果您知道每个字符串的最大大小,则可以这样声明pstr
char pstr[][32] = { \"Robert Redford\",\"Hopalong Cassidy\",\"Oliver Hardy\"
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。