C语言指针访问越界(char *str = “”Hello,word”与char[ ]=“hello,word“的不同之处)

前言

今天做笔试题的时候,有一个很简短的代码,看似简单,实则到处都是坑。
于是我在笔试后就在编译器上跑了一遍,验证了我的想法。

题目

在这里插入图片描述

A、hello,word
B、Hello,word
C、%s
D、没有输出

我相信有很多小伙伴会选 A吧!

运行结果

DEVC++

在这里插入图片描述

Linux gcc

在这里插入图片描述

原因

运行结果会出现断错误,原因在于, char *str=“Hello world” 这句仅仅声明了一个指针变量,指向字符串"Hello world",而"Hello world"这个字符串程序没有给它分配空间,编译器把它分配到常量区.而常量字符串的值是不允许被修改的 ,所以会出现断错误.

正确代码

只需将指针变量str改为指针变量即可:
在这里插入图片描述

运行结果

在这里插入图片描述

数组可以的原因

原因在于,str[ ]=“Hello world"是你自己定义了一个长度为12 的字符数组,所以对字符串"Hello world” 编译器会给数组在栈中分配内存空间,并将字符串存入数组的空间中,所以你能修改它的值。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值