? ? ? ? 1月10号,目前:研一,今天开始重新学习C语言,虽然C语言已经学过了,但是磨刀不误砍柴工,多夯实夯实基础,基础不牢地动山摇,多学习一下总归为后续的学习做好铺垫,对于编程的学习,写博客输出东西能反过来促进自己的学习,但是我不大喜欢写知识点的东西,我比较喜欢写刷题的博客或者问题导向的博客,第一天主要有两个问题分享一下,并在最后说说我对学好计算机的理解
1、scanf函数为什么在VS编译器中提示不安全?
看下面一段代码:
#include <stdio.h>
int main()
{
char arr[5];
scanf("%s", arr);
printf("%s\n", arr);
return 0;
}
????????当输入的字符不超过4个的时候,程序并没有什么问题。 那么这时候肯定有人问,arr[5]为什么是不超过4个呢?这是因为最后一个回车会输进去一个换行,算一个字符。
? ? ? ? 那么如果我们输入的字符大于4个会发生什么呢?让我们看一看下面的截图。
?
? ? ? ? 我们可以看到,?报了一个错误,但是,黑框框也打印出来了我输入的内容,为什么会报这个错误呢?我们定义的char数组,arr[5],内存分配了5个字节从arr[0]-arr[4],如果继续往里面写,那么scanf会越界,非法访问其他内存写入东西,所以说呢,scanf函数不安全,因为它并没有在这方面进行一定的限制。
2、全局变量是什么时候分配内存的?
????????全局变量在函数运行之前已经创建好了??也就是main函数开始执行的时候??全局变量已经存在了。
?理解如何学好编程
? ? ? ? 一句话,慢慢来会很快。一定要下功夫,很多东西并不是听懂了才叫会,而是你真真正正的做出了,表达出来才算学会,这也是大家写博客的意义。想要学好一定得勤学苦练,多刷题,多看书。
|