下列给定程序中,函数fun()的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。 注意:字符串的长度最长允许79。 请改正函数fun()中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改

admin2010-05-05  25

问题 下列给定程序中,函数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=’*’;
    do
      {a=*p;
   /*****************found***************/
      i++;
     }while(*p);
    a=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);
   }

选项

答案(1)错误:void fun(char s[],int n) 正确:void fun(char *s, int n) (2)错误:s=p; 正确:p=s; (3)错误:i++; 正确:i++;p++; (4)错误:a[i]=0; 正确:a[i]=’\0’;

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

相关试题推荐
最新回复(0)