记录calloc 出的笑话

本文记录了一次在项目中使用calloc和malloc解析AT指令时遇到的问题。作者原本认为多分配一个字符空间只是为了心理安慰,但实际上这个额外的字符用于保存字符串结束符'',缺少它会导致后续解析问题。通过这次经历,作者认识到了内存分配细节的重要性,并反思了自己的误解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

calloc 和 malloc 的不同,在于calloc开辟的空间会先进性清零操作。
项目的AT指令解析部分,使用calloc 开辟空间保存拆分后的命令,详情见代码

typedef struct g_pointer{
    uint16_t len;
    uint8_t * buff;
}s_pointer;
s_pointer state_pointer[UART_COMMAND_NUMBER];

        while( token != NULL )
        {   
            state_pointer[count_nubmer].len  = strlen(token);
            //state_pointer[count_nubmer].buff = calloc(sizeof(char), strlen(token));
            state_pointer[count_nubmer].buff = calloc(sizeof(char), strlen(token)+1);
            memcpy(state_pointer[count_nubmer].buff, token, strlen(token));
            count_nubmer++;
            token = strtok(NULL, s);
        }

state_pointer[count_nubmer].buff = calloc(sizeof(char), strlen(token) );
state_pointer[count_nubmer].buff = calloc(sizeof(char), strlen(token)+1);

这里的没有多开辟一个空间,导致后续字符串解析 ‘\0’ 的问题让人头疼,想了很多办法解决,也都可以解决,后来讨论的时候被嘲讽了 ,难道+1不是为了解决字符串 ‘\0’ 的问题吗,瞬间整个人都不好了,总体来说,我之前一直以为,多开辟几个空间就是给个心里安慰,emmmmm。
尽情的嘲笑我吧,记录一下!
2021年10月14日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值