项目代码:C语言bug记录

最近在调项目的代码,经常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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值