网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月21日漏签0天
c语言吧 关注:801,595贴子:4,374,213
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 20回复贴,共2页
  • ,跳到 页  
<<返回c语言吧
>0< 加载中...

数组长度不是不能修改的吗,为什么我在末尾再加两个字符(\0已

  • 只看楼主
  • 收藏

  • 回复
  • 梦舞灬轻愁、
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
数组长度不是不能修改的吗,为什么我在末尾再加两个字符(\0已经覆盖了),还是可以正常输出,没有\0它是怎么知道字符串结束了


  • 梦舞灬轻愁、
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
应该是这张图


2025-12-21 20:40:32
广告
不感兴趣
开通SVIP免广告
  • 梦舞灬轻愁、
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我是从这个题目发现这个问题的,程序里s就5个有效字符,最后运行puts(s)为什么能输出7个有效字符


  • 無所谓的青春
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
C语言没\0也可以输出的,然后这个puts是获取一行字符串么,要是应该是先\n,还有你这个s[6]越界了,


  • kjrjrjrlkfirkk
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我的是乱码string11>|������*}�U
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)


  • kjrjrjrlkfirkk
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
编译器gcc


  • kjrjrjrlkfirkk
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这样搞很危险吧,万一旁边没给你分配的是操作系统的内存,你一写那不完蛋。开玩笑的,操作系统内存应该是只读的,搞不好读权限都没有。你可以多搞几组使一下,那片地址的后面搞不好恰好就是-1。


  • kjrjrjrlkfirkk
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
根据我多次实验,每次多输出的乱码都不会太长,也就是说0值在内存中普遍存在,所以瞎猫碰上死耗子的几率还是有的。这应该是内存的自动保护机制。


2025-12-21 20:34:32
广告
不感兴趣
开通SVIP免广告
  • 梦舞灬轻愁、
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@kjrjrjrlkfirkk 这题也超过长度了,我试的全都可以


  • 你给我果賴
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
刚刚好


  • fx2422esplus
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
计算机分了6个字节给你,下标0到5,正常情况下,下标5里内容是\0。但是下标6的位置也是内存,只是没有分配给你。编译器是默认你不会改6的位置的,而且并没有采取防止你改它的措施,要靠你自觉。同时,puts这个函数可没有闲工夫去管你6号位置有没有分配给你,读了5号,发现了d,就打印出来了,然后读6号,发现了e,也打印出来了。再然后读7号,很可能7号位置本来就放着一个\0,你的程序没有改它,于是就还是\0。puts发现了\0,就停止输出了。
但是数组越界是很危险的事,所以不要这么干。


  • fx2422esplus
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
像puts这样的函数,结束打印的标准是读到\0,它并不知道这个数组都经历了什么。


  • 竹溪里仁
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
数组已经越界了,原因是C不进行这种检查。有些其他语言会检查,有的编译时检查,也可能是运行时检查


  • 辛I哲人
  • 马猴烧酒
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这样结果是不确定的,取决于具体实现。
至于lz为什么测试都正常,可能是你的程序太简单。
还有一种可能是,操作系统按照字长64位8个字节来分配存储,你定义的数组“china”只有6个字节,然而实际为了优化速度可能给你分配了8个字节,所以越界2个还没问题。
试试多写点。比如紧接着在下面定义另一个数组,再越界访问试试。


2025-12-21 20:28:32
广告
不感兴趣
开通SVIP免广告
  • 醴曩
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
运气,c语言越界本来就是允许的,这叫相信程序员


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 20回复贴,共2页
  • ,跳到 页  
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示