关于#C语言#的问题,如何解决?

C语言指针问题显示date_p+2可以是“0”我增加判断之后还是显示这个是我的判断有问题还是形式上有缺陷

img

这段这么改试试,供参考:

if (NULL == date_p)
        return 0;
else {
        buff5_p = date_p;
        date_p = strstr(buff5_p, "\\:");        // 修改
        end_p  = strstr(buff5_p, "datastatus1");
        if (date_p && end_p)                   // 修改 
            memcpy(maxdepth, date_p + 2, (end_p - 3) - (date_p + 2) + 1);  // 修改
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    这个问题可能是由于代码存在一些缺陷导致的。下面是一些可能的解决方案:

    1. 检查指针的初始化:确保指针变量date_p在使用之前已经被正确地初始化。如果指针没有被初始化或者指向了一个无效的内存地址,那么执行date_p+2的结果可能是不确定的。

    2. 检查内存访问:确保指针date_p指向的内存地址是可读的。如果该内存地址已经被释放或者没有被正确分配,那么执行date_p+2时可能会出现问题。可以使用malloc()函数为指针分配内存,并在使用完毕后使用free()函数释放内存。

    3. 检查指针的类型:确保指针的类型与所指向内存的类型相匹配。如果指针的类型与所指向内存的类型不匹配,那么执行date_p+2时可能会出现问题。可以使用类型转换来强制指针的类型匹配。

    如果以上方法都没有解决问题,那么可能是代码逻辑或其他地方存在问题。可以尝试提供更多的代码或错误信息以便进一步排查问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

memcpy 的原型是 void *memcpy(void *destin, void *source, unsigned n);
你这代码中三个参数类型对不对,不对需要加上强制转换
你这个是代码存在语法错误。至于有没有逻辑错误先不谈。