要求移动\0到最后面

#include<stdlib.h>;
#include<stdio.h>;
#include<string.h>;
#pragma warning (disable:4996);
void*my_str1(char*p)
{
    while (*p = '\0')
    {
        char*q = p;
        if (*(p) = 0)
        {
            while (*q = 0)
            {
                *q = *(q + 1);
                q++;
            }
        }
        p++;
    }
    printf("%s\n", p);
    return;
}
int main()
{
    char p[128] = "\0ndlandfa\0ndlanfa\0dn\0alfnla\0\0";
    my_str1(p);
    printf("%s\n", p);
    system("pause");
    return 0;
}
char p[128] = "\0ndlandfa\0ndlanfa\0dn\0alfnla\0\0";要求把\0全部移到最后面

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void my_str1(char* p) {
    int len = strlen(p); // 获取字符串长度
    for (int i = 0; i < len - 1; i++) { // 只需要遍历到倒数第二个字符
        if (p[i] == '\0') { // 如果第 i 个字符为 '\0'
            for (int j = i; j < len - 1; j++) { // 将第 i+1 到 len-1 个字符向前移动一个位置
                p[j] = p[j + 1];
            }
            p[len - 1] = '\0'; // 将最后一个字符设为 '\0'
            i--; // 移动完毕后 i--,相当于再次检查当前位置
        }
    }
}

int main() {
    char p[128] = "\0ndlandfa\0ndlanfa\0dn\0alfnla\0\0";
    printf("Before: %s\n", p);
    my_str1(p);
    printf("After : %s\n", p);
    system("pause");
    return 0;
}

仅供参考