C语言字符串数组去空格问题

问题遇到的现象和发生背景

代码出现问题

问题相关代码,请勿粘贴截图
void qukongge(char arr[])
{
    int i = 0, j = 0;
    while (arr[i])
    {
        if (arr[i] = ' ')
        {
            j = i;
            while (arr[j + 1])
            {
                arr[j] = arr[j + 1];
                j++;
                printf("%s\n", arr);
            }
            arr[j] = 0;
        }
        i++;
    }
    printf("i = %d, j = %d\n", i, j);
}

int main()
{
    char arr[] = "h e   ll  o   w  o r ld";
    printf("arr = %s\n", arr);
    qukongge(arr);
    printf("arr = %s\n", arr);
    return 0;
}

运行结果及报错内容

img

arr = h e ll o w o r ld
e ll o w o r ldd
ll o w o r ldd
ll o w o r ldd
l o w o r ldd
l o w o r ldd
l w o r ldd
l w o r ldd
l o r ldd
l o r ldd
l or ldd
l orldd
l orl
i = 12, j = 11
arr = l orl

我的解答思路和尝试过的方法

不知道为什么会这样

我想要达到的结果

解决这个问题

iif里面应该写两个等于,一个等于是赋值


void qukongge2(char *arr)
{
    int j=0;
    int n=strlen(arr)+1;
    char p[n];
    int l=0;
    while(j<n)
    {
        if(arr[j]!=' ')
        {
            p[l]=arr[j];
            l++;
        }
        j++;
    }
    j=0;
    while(j<n)
    {
        arr[j]=p[j];
        j++;
    }
    printf("\n");
}

#include <stdio.h>
#include <string.h>
void qukongge(char arr[])
{

for (int j = 1; j <= strlen(arr); j++)    //最多就字符串长度的空格 ,做就循环这么多次 

{
    int i = 1;
    while (arr[i])
    {
        if (arr[i] != ' ' && arr[i - 1] == ' ')         //字符前面有空格就换一下
        {

            arr[i - 1] = arr[i];                       
            arr[i] = ' ';
        }
        i++;
    }
}

}

int main()
{
char arr[] = "h e ll o w o r ld";
printf("arr = %s\n", arr);
qukongge(arr);
printf("arr = %s\n", arr);
return 0;
}