改错题 1.  下列给定程序中,函数proc()的功能是:将字符串str中的所有字符复制到字符串b中,要求在每复制3个字符之后插入1个空格。
    例如,在调用proc()函数之前给字符串str输入“abcdefghijk”,调用函数之后,字符串b中的内容则为“abc def ghi jk”。
    请修改程序中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include<stdio.h>
    void proc(char *str,char*b)
    {
    int i,k=0;
    while(*str)
    //****found****
    {
    i=1;
    //****found****
    while(i<3||*str)
    {
    b[k]=*str;
    k++;str++;i++;
    }
    if(*str)
    //****found****
    {b[k]='';}
    }
    b[k]='\0';
    }
    void main()
    {
    char str[80],b[80];
    printf("Enter a string:");gets(str);
    printf("The original string:");
    puts(str);
    proc(str,b);
    printf("\nThe string after insert
    space:");puts(b);printf("\n\n");
    }
【正确答案】(1)错误:i=1;
   正确:i=0;
   (2)错误:while(i<3||*str)
   正确:while(i<3&&*str)
   (3)错误:b[k]='';
   正确:b[k++]='';
【答案解析】 由函数proc()可知,变量i为计算每次字符个数是否到3的计数器变量,其初始值为0,因此,“i=1;”应改为“i=0;”。当计数器i小于3,而且字符串str没有结束时,将str中的字符赋值给字符串b,因此,“while(i<3||*str)”应改为“while(i<3&&*str)”。每次计数器变量为3而字符串str没有结束时,字符串b被赋值为空格,而不是空字符,因此,“b[k]='';”应改为“b[k++]='';”。