读C语言

1.C语言大多数编译器不对数组下标进行检测,也就是说如果定义一个数组A[6],你去访问A[9],可能不会出错,但是属于非法的。所以,对数组越界检查是程序员的责任。
2.对于多维数组,如果定义一个二维数据,按照一维数据去访问,结果也操作系统的内存管理方法有关。如定义A[3][4],如果去访问A[7],结果内存管理有关,如果分配内存时按行分配,可访问的是A[2][0],如果按列分配,可能访问的是A[0][2],但编译器没有报错,只能说是没有语法错误,但内存操作是错误的。
3.定义一个整形来保存字符的优点。int a ;a= getchar(); a!=EOF || a!='\n' 可以避免溢出带来产生不是EOF却误码认为是EOF,字符的本质是整形。
4.strcpy,strncpy,memcpy,memcpy strcat这些函数的第一个参数不能是字符串常量的原因:既然要对这个地址后面的内存进行操作,那当然不能是常量。如char const a[10] ="2324", char b[5];strncpy(a,b,3);编译器提示出错,是因为a是一个字符串常量。
5.不要以为读取一行就用户gets(),当一行的输入太长,也会溢出,这时只能用fgets();
6.关于char 类型, ansi规定了一个缺省的范围是0 ~ 127 。但是不同的编译器默认的char 范围是不同的,可能是默认为unsigned char ,可能是signed char,具体由编译器决定,但C的库函数的很多参数都是char,这就可能会出现移植性与效率方面的差异,所以,最好是把char 的范围控制在unsigned 与 signed之间, 也就是ansi规定的一个缺省。另外,字符类型的本质还是一个整型。

你可能感兴趣的:(读C语言)