C和指针前六章小结之第一章

来源:互联网 发布:儿童编程培训怎么看 编辑:程序博客网 时间:2024/05/30 05:06

         第一章书上给了个程序,记得上年看的时候还有点吃力,不过现在看,还是有很多地方需要注意。

         自己需要注意的地方如下:

        1、gets(char *s) 函数: 它可以无限读取,不会判断上限。如果自己给定的存储空间不够就会发生溢出。如果溢出,多出来的字符将写入堆栈中,这就要覆盖堆栈原先的内容,破坏程序的相关变量。所以在读取字符的时候可以用 “ fgets( char* s, int  size, FILE *stream ). stream 可以是stdin。还有就是fgets()头文件是stdio.h;gets()头文件是stdlib.h.

下面是网上查的关于fgets和gets:

fgets---读到换行符和EOF,就结束本次读操作。

gets()读取换行符并将其丢弃fgets()把换行符存字符串里,但每次显示字符串会显示换行符(不足之处)。fgets()是为文件I/O而设计得,在处理键盘输入时就不如gets()那么方便

    2、注释: 注释不允许嵌套,在预处理时,用空格代替。如果一段代码原先就有注释存在,想要注释掉它,可以从逻辑上删除它。用预处理语句。 #if指令。如下:

          #if               0

                      statements

         #endif

        可以有效的将程序段从程序中出去。预处理后就没有了。

    3、C语言为什么不执行数组下标有效性检查?

          答案为C和指针答案,如下:

          The programmer can put in subscript checks where they are needed; in places where the sub-
script is already known to be correct (for example, from having been checked earlier), there is no
overhead expended in checking it again. But the real reason they are omitted is the fact that sub-
scripts are implemented as pointer expressions,