首 页 行业热点 新车 试驾评测 养车用车 车型库

C语言中的全局变量和局部变量

发布网友

我来回答

5个回答

热心网友

局部变量是在某一函数内定义的变量,有效区域在本函数里。
全局变量定义在函数外,全局起作用。

热心网友

是局部变量啊= =全局变量是在函数值外定义的变量【包括主函数、所以在main函数中定义的变量也是局部变量

热心网友

运行了一下,程序没有问题啊

热心网友

你这个问题我没有重现 但是大概问题出在哪我提两点想法
你的s只有5位长,而当你输入一个字符串的时候实际是将这个字符串赋值给s并且在后面加上'\0'的结束符,所以你输入 n长度的字符串其实是需要n+1长度的字符串来接的。当你输入5位的字符串的时候你的s已经发生溢出了,你试着将s[5]改为s[6]。
而全局变量和局部变量是不同的 存储的空间不同 具体为什么全局变量可以我也不清楚 但是可以肯定 出现这样的差别一定是你的代码有问题

空号一号 所说的&s的问题是对的。你写成&s其实就是没有理解数组就是指针的概念。但是这个问题又不是问题 因为对于数组来说 s和 &s是同一个值 你不信可以printf("s=%p &s=%p", s, &s);试试,但是如果s是指针就不一样了追问谢谢你的回答。果真是因为没有考虑到\0。

可是。函数中,我已经设置了strlen>5时重来。
是不是strlen函数不计算\0???

关于scanf 我用了&,我是故意的。当时程序莫名出错,那是我绝望中胡乱尝试的改变。运行后没变化所以我就没改回来了。不过谢谢提醒。

追答嗯 strlen是不会计算'\0'的

热心网友

跟s定义在哪里没关系,这个程序有错误:s[5]是一个数组,那么在程序里写s就是这个数组的第一个元素的指针,而scanf要的就是指针,所以不应该写&s而是s。即:
scanf("%s", s);
另外输入长度大于5时会写到数组s的外面造成缓冲溢出,这是非常危险的情况,会导致程序接下来的行为无法预测,甚至崩溃。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com