填空题
下列给定程序中,函数proc()的功能是:在字符串的最前端加入m个*号,形成新串,并且覆盖原串。
例如,用户输入字符串abcd(以回车键结束),然后输入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 str [so];
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、(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'”。