C++新手..请教 这段代码为什么会报错?

学习C++,代码是字符串替换的练习, 其中while循环中的表达式
p = strstr(p, sub) != NULL 执行到这里会报错,
如果把这句话改成 ( (p = strstr(p,sub) ) != NULL 先执行左边就没有问题,
感觉好像是先执行的右边,不明白的是strstr(p,sub) != NULL 这句为什么会报错... ...

使用的Visual Studio 2017编译器什么的都是默认配置没有改过,

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

                            // ↓这里用了二级指针
int replaceSubstr(char *src,char **dst,char *sub, char *new_sub)
{
    char *out = NULL;
    char *p = NULL;  
    char *q = NULL; 

    int sub_len = 0;
    int new_sub_len = 0;

    if (src == NULL || dst == NULL || new_sub == NULL) {
        fprintf(stderr, "src == NULL || dst == NULL || new_sub == NULL");
        return -1;
    }

    out = (char *)malloc(sizeof(char *) * 4096); //在堆上分配4096 * char*个长度的空间
    
    if (out == NULL)
    {
        fprintf(stderr, "malloc out error\n");
        return -1;
    }
    
    memset(out, 0, 4096); //给4096字节的堆空间填充空值

    p = src; // p指向字符串开头
    q = p;   // q指向字符串开头

    sub_len = strlen(sub); // 被替换的字符串长度
    new_sub_len = strlen(new_sub); // 要替换的字符串长度  

    while (  p = strstr(p, sub) != NULL) {  // 如果strstr不为空
        // 找到了字串
                    
        //q是最开始的指针位置 p-q是到第二个sub之间的字符串长度
        strncat(out, q, p - q); //给out赋值
        strncat(out, new_sub, new_sub_len); //然后把新sub替换上去

        p += sub_len; // p指针增长长度

        q = p;  //q指向新的开始位置

        if (*p == '\0') { // 如果*p的指针是0 那么退出循环
            break;
        }
    }

    if (*q != '\0') {
        strncat(out, q,( src + strlen(src) - q ));
    }

    *dst = out;
    //free();
    return 0;
}

int main(void) 
{
    char *str = "213abcd123231abcd213321asdabcd123214abcd";
    char *dst = NULL;

    replaceSubstr(str,&dst,"abcd","XX");
     
    printf("%s\n", dst);
    return 0;
}
阅读 2.6k
1 个回答

类型赋错了 布尔值赋给了指针

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题