下列给定的程序中,函数fun()的功能是;将s所指字符串中出现的n所指字符串全部替换成t2所指字符串,所形成的新的字符串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如:当s所指字符串中所指的内容为 abcdabfab,t1所指字符串中的内容为ab,t2所指字符串中的内容为99时,结果在w所指的数组中的内容应为99cd99f99。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include <conio.h> #include <stdio.h> #include <string.h> /*************found**************/ int fun (char *s, char *t1, char *t2, char *w) {int i; char *p,*r,*a;strcpy(w,s);while (*w) {p=w; r=t1; /*************found**************/ while (r)if (*r= =*p) {r++;p++;}else break; if (*r= =’\0’) {a=w; r=t2; /*************found**************/ while (*r){*a=*r;a++;r++} w+=strlen(t2); } else w++; } } main() {char s[100],t1[100],t2[100],w[100];clrscr();printf("\nPlease enter string S: "); scanf("%s",s);printf("\nPleaseentersubstring t1: "); scanf ("%s", t1);printf("\nPlease enter substring t2: "); scanf ("%s",t2);if (strlen(t1)= =strlen(t2)) { fun (s,t1,t2,w); printf("\nThe result is : %s\n",w); }else printf("Error : strlen(t2)\n"); }
参考答案:错误:int fun(char *s,char *tA,char *tB, char *w)
解析:正确:void fun(char *s,char *t1,char *t2, char *w) (2) 错误:while(r) 正确:while(*r) (3) 错误:r++ 正确:r++; 在int fun(char *s,char *t1,char *t2, char *w)中,用int型定义指针数组。ANSI标准要求动态分配系统返回void指针。 void指针具有一般性,它们可以指向任何类型的数据。但目前绝大多数C编译所提供的这类函数都返回char指针。无论以上两种情况的哪一种,都需要强制类型转换的方法把char指针转换成所需的类型。该程序段应该是void fun(char *s,char *t1, char *t2, char *w),另外,while(r)和r++都是简单的逻辑和语法错误,只要加强了C语言的基础,这样的错误明显是“送分”的。