文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
字符串字面值不能更新
指向字符串字面值的指针变量不能用来修改字符串的内容:
但如果你用字符串字面值创建一个数组,就可以修改了:
char cards[] = "JQK";
这是由 C 语言使用存储器的方式决定的……
存储器中的 char *cards="JQK";
为了弄明白这行代码导致存储器出错的原因,我们需要切开计算机的存储器,看看计算机究竟将会做哪些事。
- 计算机加载字符串字面值。
当计算机把程序载入存储器时,会把所有常数值(如字符串常量“JQK”)放到常量存储区,这部分存储器是只读的。
- 程序在栈上创建 cards 变量。
栈是存储器中计算机用来保存局部变量的部分,局部变量也就是位于函数内部的变量,
cards 变量就在这个地方。
cards 变量设为“JQK”的地址。
cards 变量将会保存字符串字面值“JQK”的地址。为了防止修改,字符串字面值通常保存在只读存储器中。
计算机试图修改字符串。
程序试图修改
cards 变量指向的字符串中的内容时就会失败,因为字符串是只读的。
所以问题出在像“JQK”这样的字符串字面值保存在只读存储器中。它们是常量。
既然知道了症结所在,如何对症下药呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论