珙白 2022-04-13 22:46 采纳率: 80%
浏览 100
已结题

设定为全局变量的字符串数组,为什么在主函数内可以设定超过大小的容量(语言-c++)

问题遇到的现象和发生背景

char s[10]设定为全局变量,在主函数内可以输入超过10位的数,并输出
但将char s[10]放入主函数内部,就无法输入超过10位的数

问题相关代码,请勿粘贴截图

char s[10];
int main()
{
int i=0;
//char s[10]; //放入内部
cin>>s;
while(s[i]){
cout<<s[i];
i++;
}
return 0;
}

运行结果及报错内容

放入外部
13234655524497812
13234655524497812
放入内部
13234655524497812

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

7条回答 默认 最新

  • 码诅 2022-04-13 23:15
    关注
    获得0.45元问题酬金

    字符串的结束标志'\0',你定义成全局变量,是有默认值0的,所以字符串即使越界了有结束标识符。也可以正常输出。
    当你定义在函数内部时,是随机值。这样越界了的话很有可能访问到别的数据地址,就没有结束标识符,所以就没法输出字符串。

    具体的你可以去了解一下堆空间和栈空间

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 赞助了问题酬金5元 4月13日
  • 修改了问题 4月13日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 C# 用partial定义部分类无法快速预览代码
  • ¥15 fastreport 代码无法设置最后一页横线不显示
  • ¥15 stm32u535芯片usb hid custom类接收数据有问题
  • ¥20 quartus功能仿真
  • ¥15 传染病最优控制问题,控制为什么没起作用
  • ¥15 ue5.3 pico打包失败 求帮助
  • ¥15 请教,这是用chatgpt写的CAD LISPD脚本,需求是画一个由双直线组成的矩形
  • ¥50 微信小程序 成功包奶茶啊
  • ¥15 计算机博弈的六子棋代码
  • ¥15 在Fetch API中传送的参数为何不起作用?