庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>C语言>编程技巧>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

常见错误

 作者:贺胤筌    日期:2005-8-4 13:32:25
字号选择〖 〗/ 双击滚屏 单击停止   

1.用malloc或farmalloc动态分配内存时,如

  char *buffer;

  buffer=(char *)malloc(300);

  因为并不是在所有的情况下,都会分配成功

  所以应加 if(buffer==NULL) {......}

2.char far *buffer;

  buffer=(char far *)farmalloc(size);

  当size的值大于64K时,很可能不会分配成功,

  但是不会返回NULL,很容易出错。

  因此最好size的值最好不要大于64K

3.char 的取值范围为 0-127

  unsigned char 的取值范围为0-255

  新手常常在使用char时,出错,比如说,

  在256色的屏幕模式下,颜色索引值为0-255,

  而很多新手用 char color,这样会出错。

4.编程时常会对键盘进行处理

  key=bioskey(1);

  用bioskey(1)时,程序从缓冲区取一个键,但是不

  会把这个键从缓冲区移走,因此key的值将永远保持不变

5.用if(bioskey(1)!=0) key=bioskey(0);

  这样按键时,会从缓冲区移走一个键。

  但是当不按键时,key的值将保持不变,直到按下一键为止

  因此应加 else key=0;

6.使用textcolor(int newcolor);

      和textbackground(int newcolor);

  这两个函数来改变字符颜色和背景色时,

  用stdio.h中的printf,puts等向屏幕输出的函数是,并不能

  按textcolor(int),textbackground(int)这两个函数所要求的颜色来显示。

  用该用conio.h中的cprintf,cputs等函数

7.printf("\n");光标会在屏幕上换行并移动到第一列。

  但cprintf("\n");不会,printf是标准输出函数,与DOS相关

  DOS会自动把'\n'处理成'\n'和'\r',而cprintf是控制台级函数,不会这样

  因此应该用cprintf("\n\r");

8.float a=1.9;

  if(a==1.9) printf("OK");

  运行时却不会显示OK;

  不要用float型数字进行关系运算中的等于运算

  改为double双精度型即可解决问题.

9.在TC2.0中

  main()

  {

   ......

   .....

  }

  这样编译时不会出错

  但是在有些C语言版本中,系统会自动当作

  int main()

  {

   }

  而显示"..should return a value "

10.float a;

   a=1/2;

    printf("%f",a);

   运行的结果是0.000000,而不是0.500000.

   因为/号两边的数字是1和2,系统会当作整型处理,因此出

   现这种情况,解决办法是改为 a=1.0/2 或 a=1/2.0 或 1.0/2.0

11.一个函数

   char *buf()

   {

      char *data;

      char str[]="HELLO";

      data=str;

      return data;

   }

   因为系统在调用完函数时,会自动释放为str 开辟的空间,

   因此 return data无意义

12.对于findfirst(char *name,struct ffblk,int attrib);

       findnext(struct ffblk);

       当寻找目录时,用findfirst("*.*",&ffblk,FA_DIREC);

       虽然所找文件的属性为目录,但是会将当前目录下的所有文件找出来

      用findfirst("*.",&ffbli,FA_DIREC)时,找出来的是目录以及没有扩

      展名的文件。

13.看下面一个函数

   /*640x480x256*/

   void plot(int x,int y,unsigned char color)

   {

      char far *video=(char far *)(0xa0000000L);

      long int offest;

     

      offest=(y-1)*640+x-1;

      *(video+offest)=color;

   }

   看似没有错误,但是对于offest=(y-1)*640+x-1这句,

   虽然offest是长整型,但是y是短整型,在计算(y-1)*640时,系统

   会按短整型处理,当y的值取110以上时,(y-1)*640的值显然会超出

   短整型数字的取值范围,从而产生错误,因此应改为

   offest=(long int)(y-1)*640+x-1;

14.对于一个数组 int data[5][4];

   data表示data[0][0]的地址

   data[2]表示data[2][0]的地址

   因此有人认为data[4][2]的地址可表示为

   (1).data+4*4+2;

   (2).data[4]+2;

   其中(2)是正确的,而(1)却是错误的.

   因为data的基类型是8个字节的,

   data+4表示的就是data[4][0]的地址

   data+1表示的就是data[1][0]的地址

15.许多人认为转义字符'\64'中的64是十进制数,

   但实际上这个64是八进制数,这个八进制数前面可以加0也可不

   加0,当然转义字符\后面也可以用十六进制数,但要

   用'\x..'或'\X..'的形式,如'\x14'。

16.看下面这个程序

   #include <stdio.h>

   void display(int data[],int num)

   {

     int i;

     for(i=0;i<num;i++)

       printf("%d\n",data[i]);

   }

   void main()

   {

      int da[10]={0,1,2,3,4,5,6,7,8,9};

      display(da,10);  

  }

   一般认为当程序里调用这个函数时,系统会为形参data[]开辟一个

   10个整型数字的存储空间,实际上,这个函数只为data[]开辟一个整型指针类型的空间,

   使用指针指向data[]的首地址,因此在display(int data[],int num)这个函数中,

   若使用赋值语句对数组data[]的某项赋值,如data[0]=2,会使主程序中的数组da[]的值改变.

17.

   void main()

   {

       unsigned char index;

       for(index=0;index<256;index++)

      {

         printf("%d\n",index);

      }

   }

    在编译时,会出现警告。

    在TC2.0中,若改为index<=255,编译会通过,但是运行程序时

    却会陷入死循环,大家不禁会产生疑问,unsigned char类型数据

    取值范围为0-255,为什么上述程序会出现错误呢。

    让我们先看下面一个程序:

    void main()

    {

       int i;

       for(i=0;i<10;i++)

       {;}

       printf("%d",i);

    }

    运行结果为10,当i=9的循环完成后,i自加1,使得i=10,这时不符合

    i<10,才跳出循环,因此运行结果为10;

    同理,若改为i<=10;则运行结果为11。

    通过这个程序,应该能明白为什么前一个程序会出错了。

上一篇:几行代码,可画所有函数的图像    下一篇:XP环境下的tc鼠标调用  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 贺胤筌
信息来源: 网络 录入时间: 2005-8-4 13:32:25
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿