改错题 1.  下列给定程序中,函数proc()的功能是:在字符串的最前端加入m个*号,形成新串,并且覆盖原串。
    例如,用户输入字符串abcd(以Enter键结束),然后输入m值为3,则结果为***abcd。
    注意:字符串的长度最长允许为79。
    请修改函数proc()中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    #include<conio.h>
    void proc(char str[],int m)
    {
    char a[80],*p;
    int i;
    //****found****
    str=p;
    for(i=0; i<m; i++)a[i]='*';
    do
    {a[i]=*p;
    //****found****
    i++;
    }
    while(*p);
    //****found****
    a[i]=0;
    strcpy(str,a);
    }
    void main()
    {int m; char sir[80];
    system("CLS");
    printf("\nEnter a string:"); gets(str);
    printf("\nThe string:%s\n",str);
    printf("\nEnter n(number of*):");
    scanf("%d",&m);
    proc(str,m);
    printf("\nThe string after inster:%s\n",str);
    }
【正确答案】(1)错误:str=p;
   正确:p=str;
   (2)错误:i++;
   正确:i++; p++;
   (3)错误:a[i]=0;
   正确:a[i]='\0';
【答案解析】 由函数proc()可知,变量p是指向字符串的指针,其初始化应为字符串首地址,因此,“str=p;”应改为“p=str;”;将p指向的字符串中的每一个字符插在m个*之后,并存放在字符串数组a中,因此,“i++;”应改为“i++; p++;”;操作完成后要为字符串数组添加结束符,因此,“a[i]=0;”应改为“a[i]='\0';”。