问题 问答题

下列给定程序中,函数fun()的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。
注意:字符串的长度最长允许79。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序;
#include <stdio.h>
#include <strzng.h>
#include <conio.h>
/*****************found***************/
void fun(char s[], int n)

char a[80],*p;
int i;
/*****************found***************/
s=p;
for(i=0; i<n; i++) a[i]=’*’;
do
a[i]=*p;
/*****************found***************/
i++;
while(*p);
a[i]=0;
strcpy(s,a);

main()
int n;char s[80];
clrscr();
printf("\nEnter a string:");gets(s);
printf("\nThe string\%s\n",s);
printf("\nEnter n(number of*):");scanf
("%d",&n);
fun(s,n);
printf("\nThe string after inster:
\%s\n",s);

答案

参考答案:

 错误:void fun(char s[],int n) 正确:void fun(char *s, int n)

(B)错误:s=p; 正确:p=s;

(C)错误:i++; 正确:i++;p++;

(D)错误:a[i]=0; 正确:a[i]=’\0’;

解析:

在本题中,s是数组名,代表数组首地址,在编译时对s数组分配了一段内存单元,因此在程序运行期间s是一个常量,不能再被赋值。因此s=p是错误的,如果把“char s[];”改成“char *s;”,则程序正确。此时s是指向字符数组的指针变量,p=s是合法的,它将字符串的首地址赋给指针变量p,然后在printf函数语句中输出字符串s。因此,应当弄清楚字符数组与字符指针变量用法的区别。

单项选择题
单项选择题