Keep on going, never give up.

几个C 编程最易出错实例

C语言编程时常会有一些错误,即使对经验老道的程序员来说也时常会犯,本文就来整理一些常见错误,方便警醒。

一、影响发布程序运行的BUG

1、无符号型变量做循环变量

如下语句使用循环可能会死循环:

unsigned int i=0;
for(i=7;i>=0;i--) {
    printf("%d",i);
}

2、不同变量类型之间运算

float a;
float b;
int x=a%b;

3、等于=和逻辑==

这个等于用法在高级语言里非常常见,不过一般都会给i=0打上括号,因为只是判断i值的非0,不过从理解上,还是不推荐这种写法。

if(i=0) {
 x=1;
}

4、scanf用法错误

输入变量忘记加地址运算符“&”。

int a,b;
scanf(“%d,%d”,a,b);//Should be scanf(“%d,%d”,&a,&b);

5、指针传递

下面的指针传递也是错误的,Result不会打印出任何结果,因为tp依然为NULL。

void f(char *p) {
    p=(char*)malloc(5);
    strcpy(p,"hello world!");
}

void main()
{
char *tp=NULL;
f(tp);
printf("Result:%s\r\n",tp);
}

二、直接触发编译器检查

其它还有些容易犯的错误,比如

  • 写错大小写
  • 字符常量和字符串常量
  • 定义数组时使用动态变量

其中,定义动态数组实例如:

void foo(int x) {
char a[x];
}

这类问题,一般编译器都能检查出来,所以不会带到发布程序中。

三、小知识

1、整形求模运算中

x&(N-1)结果等于x%N,测试程序如下:

cout<<"Input:";
cin>>iny;
printf("Result:%d - %d\r\n",iny&127, iny%128);//iny&(N-1) === iny%N

 

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.