空指针引用:问题:指针 ptr 指向了空地址 NULL,试图对空指针进行解引用,导致程序崩溃。未初始化的变量使用:问题:变量 num 没有初始化,其值是未定义的,使用未初始化的变量进行计算会产生不确定的结果。除以零:问题:除数 y 的值为零,导致除法运算产生了除以零的错误。逻辑错误:问题:逻辑运算符应为 ||...
然后重新编译运行修改后代码,可以看到结果如下:可以看到strlen返回的长度值就是8,没有问题,其值是大于-1的,一切正常。但是任然是走的else分支,也就是if判断条件-1 < strlen(test_str) 结果为False,但是不应该啊,8明明大于-1。小伙伴想了半天,抓破脑袋也不知道是什么情况?不知道问题原因在哪里。于是就...
那么这里肯定要入参检测,看看字符串长度有没有问题,于是小伙子噼里啪啦写了类似下面这段代码: #include<stdio.h>#include<string.h>intmain(){constchar* test_str='test_str';if(-1<strlen(test_str))printf('字符串长度正常.\n');elseprintf('字符串长度异常.\n');return0; } 问题代码 写完了之后当...
#include "game.h" voidInitBoard(charboard[ROW][COL],introw,intcol) { inti=0; intj=0; for(i=0;i<row;i++) { for(j=0;j<col;j++) { board[i][j]=' '; //printf("%c \n", board[i][j]); } } } //void DisplayBoard(char board[ROW][COL], int row, int col) //{ /...
修改后代码 下面运行修改后代码,可以看到结果如下: 正常结果 可以看到,“字符串长度”正常出来了,表示if判断结果为真,通过了。 基础不牢,地动山摇。 总结一下,这里问题就是C语言的隐式类型转换,加上关键是这里被比较的数是-1,是负数,强制类型转后之后就变成一个很大的正数。如果你这里-1换成0,绝对没有问题...
以下是一段C语言比较代码的程序,学生发给我说,编译没有错误,但是运行有问题。 #include<stdio.h>//取a,b,c中的最大值//intmax(intx,inty,intz){intmax=x;if(y>x)max=y;elseif(z>x)max=z;returnmax;}intmain(){inta,d,c,b;printf("请输入数字a,b,c\n");scanf("%d,%d,%d\n",&a,&b,...
虽然运行下面代码不会出错,但是对数组a[10]的写操作超出了维度,导致在地址为a+10的地方也写入了数据,但是容易引发潜在bug。 #include<stdio.h>intmain(){inti;inta[10];for(i =0; i <=10; ++i) { a[i] =0;printf("%d\n", i); ...
STM32单片机中C语言的一些隐藏bug 必须类型一致的判断才能正常 double a=-0.4; if(a < -0.2){ print("低电平"); } 1. 2. 3. 4. 这段代码可能未必如你所愿的运行. < 小于号的判断一定要类型一致, 尤其是牵扯到双精度类型的判断… 一定要保证符号 两边的数据类型一致才有可能得到你想要的结果. 代码...
所谓优秀的代码,无非就以下几个特点: 1.代码运行正常 2. bug很少 3. 效率高 4. 可读性高 5. 可维护性高 6. 注释清晰 7. 文档齐全常见的技巧: 使用assert 尽量使用const 养成良好的编码风格 添加必要的注释 避免编码的陷阱。 接下来讲一下assert与const ...
一个典型的C代码设计模式谬误 [导读]礼拜三接到一个学弟的问题,学弟在实习,说有个很奇葩的bug解决不了,我说你描述一下吧大概就是利用spi命令向flash里的某个地址写入数据,boot之后bootloader从flash的该地址里读数据,但是现在的问题是,偶尔读出来的数据不对,貌似是数据没有写进去,该问题目前只出现......