第一章
从逻辑上删除一段C代码,更好的方法是使用 #if 语句,而不是注释。例如:
#if 0 //#if和#endif之间的语句就可以有效的从代码中删除
//即使这段代码之间原先存在注释也无妨
statements
#endif
stdio.h头文件使我们可以访问标准I/O库中的函数
stdlib.h定义了 EXIT_SUCCESS 和 EXIT_FAILURE 符号
无返回值的函数称为过程
把原型放在头文件中用#include指令包含它们,可以避免由于同一个声明的多份拷贝而导致的维护性问题
(1) gets函数从标准输入读取一行文本并把它存储与作为参数传递给它的数组中。 一行输入由一串字符组成,以一个换行符结尾。
(2)gets函数丢弃换行符,并在该行的末尾存储一个NUL字节。 gets函数返回一个非NULL值,表示该行已被成功读取。
(3)当gets函数被调用但事实上不存在输入行时,它就返回NULL值,表示它到达了输入的末尾(文件尾)。
(4)NUl没有定义,NULL在stdio.h中定义
字符串就是一串以NUL字节结尾的字符。
NUL作为字符串终止符,并不被看做字符串的一部分
字符串常量是源程序中被双引号括起来的一串字符。
scanf函数的返回值是函数成功转换并存储与参数中的值的个数
使用所有格式码(除了%c外)时,输入值之前的空白(空格,制表符,换行符等)会被跳过,值后面的空白表示该值的结束。因此用%s输入字符串时,中间不能包括空白。
标准并为硬性规定C编译器要对数组下标进行有效性检查。如果输入的值超过了数组的容量,那么多出来的值就会存储在紧随数组之后的内存位置,这样就会破坏原先存储在这个位置的数据,可能是其他变量,也可能是函数返回地址。
scanf("%d",&n)函数返回0:文件已经读完或者下一次输入的字符无法转换为整数。如果可以合法的转换为整数,那么就会返回1。
puts函数是gets函数的输出版本,他把指定的字符串写到标准输出并在末尾添上一个换行符。
exit()函数,终止程序运行
getchar()函数从标准输入读取一个字符并返回它的值。如果输入中不再存在任何字符,函数就会返回常量EOF,用于提示文件尾。
为什么ch被声明为整型:EOF是一个整数值,它的位数也比字符类型要多,把ch声明为整型可以防止从输入读取的字符意外地被解释为EOF。
const声明这个变量不可以被修改,导致编译器去验证是否违背该意图。
strncpy函数把源字符串复制到目标字符串可用的下一个位置。前两个参数是目标字符串和源字符串的地址。第3个参数指定需要复制的字符数。
strcpy,没有限制需要复制的字符数量。接受两个参数,第2个字符串参数将被复制到第1个字符串参数,第一个字符串原有的字符将被覆盖。第1个字符串参数不能是字符串常量。
strcat,把第2个字符串参数添加到第1个字符串参数的末尾。第1个字符串参数不能是字符串常量。
strchr,在字符串内进行搜索,接受两个参数。第1个参数是字符串,第2个参数是一个字符。这个函数在字符串参数内搜索字符参数第1次出现的位置,如果搜索成功就返回指向这个位置的指针,如果搜索失败就返回一个NULL指针。
strstr,第2个参数也是一个字符串,它搜索第2个字符串在第1个字符串第1次出现的位置。