项目代码:C语言bug记录

  • Post author:
  • Post category:其他


最近在调项目的代码,经常debug一调就一下午

目前还是在CLion中运行的,希望在Linux上跑也能顺利

记录一下好不容易找出来的bug



strcat/strcpy 破坏内存

项目里构造字符串用到很多strcat/strcpy

有时候debug发现

对一个变量的修改会破坏其他内存变量


主要是char *类型的字符串


错误原因



char * = "string"

的char *类型是定长不可修改的字符串,初始化时申请的空间比较小,strcat之后内存覆盖比较严重


解决方法

:用 char[N] 代替 char *,初始化时申请的空间变大,不会覆盖(但是需要静态初始化,可能存在内存浪费)



readdir函数 ECX_BAD_ACCESS

第一次用到readdir函数做目录下的文件轮询

感谢这篇博文:https://www.cnblogs.com/fnlingnzb-learner/p/6472391.html

while ((ptr = readdir(dir)) != NULL) {
//查找目录下的所有文件
        memset(filename, 0, sizeof(filename));
        stat(ptr->d_name, &st);
        strcpy(filename, ptr->d_name);
         printf("file:%s\n", filename);

这个循环经常没有遍历目录下所有文件就返回一个ECX_BAD_ACCESS的异常


错误原因

:1. fopen() 后没有fclose()

2. 同第一个bug,字符串内存覆盖导致路径错误

3. 本来用了IS_DIR判断文件类型,但是没搞清楚具体的方式,某些文件不符合条件就被忽略了


解决方法

:补上fclose() ,删去文件类型判断(如果弄清楚了还是需要判断一下),如第一个bug修改即可



fprintf函数写不进去

写上报文件的时候用了fprintf(),但是写完文件里还是一片空白


错误原因

:文件路径错误,根本就找不到文件


解决方法

:fopen() 时需要

完整的路径



Linux结构体定义报错

在这里插入图片描述


错误原因

:Linux的struct不能又定义又赋值


解决方法

:结构体定义时不要赋值,在创建struct对象时手工初始化



Linux下找不到<zconf.h>



版权声明:本文为Rachel_IS原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。