运行之后就提示 a[j++]=’ ’; 出现异常 •﹏•

编写函数fun,函数fun 的功能是:将字符串a中的所有字符复制到字符串b中,要求每复制三个字符之后插入一个空格。编写主函数,输入输出在主函数中进行。
#include<stdio.h>
void fun(char* p, char* a)
{
int i = 0, j = 0;
while (*p)
{
while (i < 3 && *p)
{
a[j] = *p;
j++;
p++;
i++;
}
if (*p)
a[j++] = ' ';
}
a[j] = '\0';
}
int main()
{
char s[100]={0}, a[100];
printf("输入:");
gets_s(s);
printf("复制:");
puts(s);
fun(s, a);
puts(a);
return 0;

}

大致改了一下,主要就是循环那里少了i=0的初始化,改正后正常:

#include<stdio.h>
void fun(char*p,char*a)
{
    int i,j=0;
    while(*p)
    {
        i=0;  //主要修改处:i每次循环都需要初始化 所以放在第一层循环中
        while(i<3&&*p)
        {
            a[j]=*p;
            j++;
            p++;
            i++;
        }
        if(*p)
            a[j++]=' ';
    }
    a[j]='\0';
}
int main()
{
    char s[80],a[80]; //这里换了一下,题主那样写也可以
    printf("输入:");
    gets(s);
    printf("输入:");
    puts(s);
    fun(s,a);
    printf("\n插入空格后的:");
    puts(a);
    printf("\n\n");
    return 0;
}

运行结果如图:

img

希望对题主有所帮助,可以的话,帮忙点个采纳!

建议使用memcpy直接复制

i 判断了大于3之后要清零

img

#include <stdio.h>
void fun(char *p, char *a)
{
    int i = 0, j = 0;
    while (*p)
    {
        i = 0;
        while (i < 3 && *p)
        {
            a[j] = *p;
            j++;
            p++;
            i++;
        }
        if (*p)
            a[j++] = ' ';
    }
    a[j] = '\0';
}

int main()
{
    char s[100] = {0}, a[100];
    printf("输入:");
    scanf("%s", s);
    printf("复制:");
    puts(s);
    fun(s, a);
    puts(a);
    return 0;
}

img